python3的爬蟲筆記11——Selenium和瀏覽器的一些設(shè)置

自從用了Selenium的方法廊驼,就停不下來了郑临。畢竟稍微正式點(diǎn)的網(wǎng)站栖博,都是JS動態(tài)加載數(shù)據(jù)。requests雖然速度快厢洞,但能用的范圍還是有限仇让。在不追求極至效率的情況下典奉,Selenium使用方便簡單并且強(qiáng)大。
這里總結(jié)一些比較實(shí)用的Selenium和PhantomJS丧叽、Chrome的設(shè)置卫玖。

后續(xù)跟進(jìn)更新,會把我以后用到的覺得還算實(shí)用的方法放進(jìn)來踊淳。

1.限制頁面加載時(shí)間

selenium webdriver在get()方法會一直等待頁面加載完畢才會執(zhí)行后面的假瞬,可如果加載時(shí)間太長會導(dǎo)致后續(xù)操作無法進(jìn)行。有時(shí)我們要的信息已經(jīng)加載出來了迂尝,再繼續(xù)加載網(wǎng)頁就沒有意義了脱茉。
可以通過set_page_load_time()方法來設(shè)定時(shí)間
然后捕獲TimeoutException異常,并通過執(zhí)行Javascript來停止頁面加載 window.stop()

from selenium import webdriver
from selenium.common.exceptions import TimeoutException

driver = webdriver.PhantomJS()
# 設(shè)定頁面加載限制時(shí)間
driver.set_page_load_timeout(5)
driver.maximize_window()

try:
    driver.get('http://phantomjs.org/api/command-line.html')
except TimeoutException:  
    print('加載超過5秒垄开,強(qiáng)制停止加載....') 
    #當(dāng)頁面加載時(shí)間超過設(shè)定時(shí)間芦劣,通過執(zhí)行Javascript來stop加載,即可執(zhí)行后續(xù)動作
    driver.execute_script('window.stop()') 

execute_script()是一個(gè)執(zhí)行Javascript代碼的方法说榆。

2.修改瀏覽器窗口大小

有時(shí)候PhantomJS不修改瀏覽器不修改窗口大小就會有意外的驚喜(報(bào)錯P橐鳌),修改的方法也很簡單签财,建議使用PhantomJS訪問網(wǎng)頁時(shí)都先加上串慰。

#自定義窗口大小:
driver.set_window_size(1366,768)
#默認(rèn)為最大窗口:
driver.maximize_window()

一般用driver.maximize_window()默認(rèn)最大窗口就行了唱蒸。

3.修改User-Agent

為了反爬蟲或者獲取一些移動端網(wǎng)絡(luò)數(shù)據(jù)時(shí)邦鲫,需要改變User-Agent。

  • 修改PhantomJS的User-Agent
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (
    "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36"
)

driver = webdriver.PhantomJS(desired_capabilities=dcap)

driver.get("http://www.baidu.com/")
#利用javascript的方法查看user-agent神汹,須在調(diào)用get()后使用庆捺。
agent = driver.execute_script("return navigator.userAgent")
print(agent)
driver.quit()

運(yùn)行結(jié)果:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36

查看當(dāng)前User-Agent的方法,還可以通過訪問 https://httpbin.org/user-agent 屁魏,然后提取信息滔以,比如說截個(gè)圖。

driver.get("https://httpbin.org/user-agent")
#網(wǎng)頁截圖
driver.save_screenshot('User-Agent.png')

獲得截圖


  • 修改Chrome的User-Agent
from selenium import webdriver

options = webdriver.ChromeOptions()
# 設(shè)置成中文
options.add_argument('lang=zh_CN.UTF-8')
# 添加頭部
options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36"')
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://httpbin.org/user-agent")
#driver.quit()

網(wǎng)頁運(yùn)行結(jié)果:


實(shí)際上我的Chrome的User-Agent(之前說過chromedriver不支持太新版本的chrome)是:

可以看到氓拼,user-agent確實(shí)是改變了你画。

4.瀏覽器無圖模式加載網(wǎng)頁

大多情況下,圖片加載對我們并無意義桃漾。無圖模式加載能提高網(wǎng)頁加載速度坏匪,從而提高爬取速度。

  • PhantomJS無圖模式

PhantomJS官網(wǎng)中給出了一些PhantomJS的設(shè)置參數(shù)(點(diǎn)我查看)撬统。

from selenium import webdriver
#不加載圖片适滓,開啟緩存
SERVICE_ARGS = ['--load-images=false', '--disk-cache=true']
driver = webdriver.PhantomJS(service_args=SERVICE_ARGS)

driver.get("http://huaban.com/")
#網(wǎng)頁截圖
driver.save_screenshot('screenshot.png')
driver.quit()

還有一個(gè)和之前設(shè)置user-agent類似的方法,也能實(shí)現(xiàn)無圖加載的功能恋追。

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

dcap = dict(DesiredCapabilities.PHANTOMJS)
#設(shè)置無圖模式
dcap["phantomjs.page.settings.loadImages"] = False

driver = webdriver.PhantomJS(desired_capabilities=dcap)

driver.get('http://huaban.com/')
driver.save_screenshot('screenshot.png')

driver.quit()
  • Chrome無圖模式
from selenium import webdriver

options = webdriver.ChromeOptions()
#1允許所有圖片凭迹;2阻止所有圖片罚屋;3阻止第三方服務(wù)器圖片
prefs = {
    'profile.default_content_setting_values': {
        'images': 2
    }
}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)

driver.get("http://huaban.com/")
#driver.quit()

運(yùn)行結(jié)果:


5.ip代理
  • PhantomJS
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

proxy = Proxy(
    {
        'proxyType': ProxyType.MANUAL,
        'httpProxy': '171.13.37.182:808'  # 代理ip和端口
    }
)
desired_capabilities = DesiredCapabilities.PHANTOMJS.copy()
# 把代理ip加入
proxy.add_to_capabilities(desired_capabilities)
driver = webdriver.PhantomJS(desired_capabilities=desired_capabilities)
driver.get('http://httpbin.org/ip')
print(driver.page_source)
driver.close()

運(yùn)行結(jié)果:

<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">{
  "origin": "171.13.37.182"
}
</pre></body></html>

或者(方法基本一致)

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver=webdriver.PhantomJS()
proxy=webdriver.Proxy()
proxy.proxy_type=ProxyType.MANUAL
proxy.http_proxy='171.13.37.182:808'

proxy.add_to_capabilities(webdriver.DesiredCapabilities.PHANTOMJS)
# 新建一個(gè)會話,并把參數(shù)傳入蕊苗,可以多次修改ip沿后,用start_session實(shí)現(xiàn)動態(tài)修改ip
driver.start_session(webdriver.DesiredCapabilities.PHANTOMJS)
driver.get('http://httpbin.org/ip')
print(driver.page_source)

driver.quit()
# 還原為系統(tǒng)代理
proxy=webdriver.Proxy()
proxy.proxy_type=ProxyType.DIRECT
proxy.add_to_capabilities(webdriver.DesiredCapabilities.PHANTOMJS)
driver.start_session(webdriver.DesiredCapabilities.PHANTOMJS)
#driver.get('http://httpbin.org/ip')

親測都有效,按理說根據(jù)PhantomJS的參數(shù)說明直接修改service_args中的proxy參數(shù)就能實(shí)現(xiàn)ip代理朽砰,代碼也比較精簡易讀尖滚,不過實(shí)際運(yùn)行時(shí)無法返回正確信息

#活在理想中瞧柔,并運(yùn)行不出來的辣雞程序23333
from selenium import webdriver
service_args = ['--proxy=171.13.37.182:808','--proxy-type=http']
driver = webdriver.PhantomJS(service_args=service_args)
driver.get('http://httpbin.org/ip')
print(driver.page_source)
driver.quit()

希望有大佬指點(diǎn)下漆弄,這個(gè)程序?yàn)樯恫粚ΑT旃撼唾!?/p>

  • Chrome
    和修改User-Agent的方法類似
from selenium import webdriver
#打開chrome設(shè)置
chrome_options = webdriver.ChromeOptions()
#添加proxy參數(shù)
chrome_options.add_argument('--proxy-server=http://58.209.151.126:808')
chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get('http://httpbin.org/ip')
print(chrome.page_source)
chrome.quit()
6.鼠標(biāo)操作

selenium對瀏覽器操作、鼠標(biāo)操作等總結(jié)
——簡友“古佛青燈度流年”的總結(jié)哥蔚,非常詳細(xì)倒谷,還包括了一些鍵盤操作、多窗口糙箍、顯示等待預(yù)期條件的完整翻譯等等渤愁,很棒!
個(gè)人感覺鼠標(biāo)操作比較有用的是懸停操作深夯,現(xiàn)在越來越多的網(wǎng)頁需要把鼠標(biāo)放到指定位置才顯示新的內(nèi)容抖格,比如百度知道的問題分類、比如淘寶的價(jià)格區(qū)間輸入框等等咕晋。

懸停操作的模板如下

from selenium import webdriver
improt time
#引入ActionChains 類
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#定位到要懸停的元素
above =driver.find_element_by_id("xx")
#對定位到的元素執(zhí)行懸停操作
ActionChains(driver).move_to_element(above).perform()
time.sleep(5)
7.COOKIE設(shè)置

使用COOKIE登錄可以免去模擬輸入賬號雹拄、密碼、驗(yàn)證碼的過程掌呜。selenium中常見的對cookie主要有以下幾種:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

#獲取cookie
driver.get_cookies()
#刪除指定cookie
driver.delete_cookie("CookieName")
#刪除全部cookie
driver.delete_all_cookies()
#添加cookie滓玖,可操作參數(shù)為name、value站辉、secure呢撞、domain、path饰剥。
driver.add_cookie({'name':'AAA', 'value':'BBB'})

本來我直接復(fù)制瀏覽器頭里面的COOKIE,發(fā)現(xiàn)程序會報(bào)錯摧阅。這里的COOKIE的參數(shù)只能是name汰蓉、value、secure棒卷、domain顾孽、path祝钢。所以我們首先用自帶的方法先拿到COOKIE。
下面以登錄百度為例若厚,獲取COOKIE:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
print(driver.get_cookies())
driver.delete_all_cookies()
input('等待登錄..')
print(driver.get_cookies())
time.sleep(2)
driver.quit()

瀏覽器顯示百度首頁后拦英,程序卡在input中,我們手動登錄下测秸,然后回程序界面隨便給個(gè)輸入疤估,即獲得了新的cookie。
運(yùn)行結(jié)果:

[{'secure': False, 'path': '/', 'name': 'H_PS_PSSID', 'domain': '.baidu.com', 'value': '1437_21088_22919_22159'}, {'expiry': 3643448945.194736, 'secure': False, 'name': 'BAIDUID', 'path': '/', 'value': '83E3B71AB47A71D9C41D8D6FC4B7DD52:FG=1', 'domain': '.baidu.com'}, {'expiry': 3643448945.1948347, 'secure': False, 'name': 'PSTM', 'path': '/', 'value': '1495965372', 'domain': '.baidu.com'}, {'expiry': 3643448945.194802, 'secure': False, 'name': 'BIDUPSID', 'path': '/', 'value': '83E3B71AB47A71D9C41D8D6FC4B7DD52', 'domain': '.baidu.com'}, {'expiry': 1496829298, 'secure': False, 'name': 'BD_UPN', 'path': '/', 'value': '12314753', 'domain': 'www.baidu.com'}, {'expiry': 1495965299.194861, 'secure': False, 'name': 'BD_LAST_QID', 'path': '/', 'value': '13404962645896014853', 'domain': 'www.baidu.com'}, {'secure': False, 'path': '/', 'name': 'BD_HOME', 'domain': 'www.baidu.com', 'value': '0'}, {'expiry': 1495965303.996251, 'secure': False, 'name': '__bsi', 'path': '/', 'value': '17537283370589855674_00_0_I_R_2_0303_C02F_N_I_I_0', 'domain': '.www.baidu.com'}]
等待登錄..
[{'secure': False, 'path': '/', 'name': 'H_PS_PSSID', 'domain': '.baidu.com', 'value': '1421_21121_22747_17001_22158'}, {'expiry': 1527501307.234465, 'secure': False, 'name': 'BAIDUID', 'path': '/', 'value': '37ECD490B4A2D652FE0A0C6264F18DBC:FG=1', 'domain': '.baidu.com'}, {'expiry': 2505117350, 'secure': False, 'name': 'KKK', 'path': '/', 'value': 'KKKKK', 'domain': '.baidu.com'}, {'expiry': 3643448997.013932, 'secure': False, 'name': 'PSKK', 'path': '/', 'value': '149KKK', 'domain': '.baidu.com'}, {'expiry': 2556057600, 'secure': False, 'name': 'KK_UID', 'path': '/', 'value': '0667eKKed5bKKKKK06K71', 'domain': '.www.baidu.com'}, {'expiry': 1496829350, 'secure': False, 'name': 'BD_UPN', 'path': '/', 'value': '12KK753', 'domain': 'www.baidu.com'}, {'expiry': 1496051750.065559, 'secure': False, 'name': 'BDORZ', 'path': '/', 'value': 'B490B5EKK15DKDA1598', 'domain': '.baidu.com'}, {'expiry': 1755165348.82662, 'secure': False, 'name': 'BDUSS', 'path': '/', 'value': 'ZsUzhOYzl4bVZFdk94NFlpSmVTTzAKKKKAAAAAAEAAAAGEUIGYWQ5OTYAAAAAKKKKAAAAAAAAAO-eKlnvKZbE', 'domain': '.baidu.com'}, {'secure': False, 'path': '/', 'name': 'BD_HOME', 'domain': 'www.baidu.com', 'value': '1'}, {'expiry': 2442045350, 'secure': False, 'name': 'sug', 'path': '/', 'value': '3', 'domain': '.www.baidu.com'}, {'expiry': 2442045350, 'secure': False, 'name': 'sugstore', 'path': '/', 'value': '0', 'domain': '.www.baidu.com'}, {'expiry': 2442045350, 'secure': False, 'name': 'ORIGIN', 'path': '/', 'value': '0', 'domain': '.www.baidu.com'}, {'expiry': 2442045350, 'secure': False, 'name': 'bdime', 'path': '/', 'value': '0', 'domain': '.www.baidu.com'}, {'expiry': 1495965355.737065, 'secure': False, 'name': '__bsi', 'path': '/', 'value': '170867479KKKK03KKI_0', 'domain': '.www.baidu.com'}]

然后我們把得到的cookie添加進(jìn)去:

from selenium import webdriver


driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.delete_all_cookies()
cookie_list =[{'secure': False, 'path': '/', 'name': 'H_PS_PSSID', 'domain': '.baidu.com', 'value': '1421_21121_22747_17001_22158'}, {'expiry': 1527501307.234465, 'secure': False, 'name': 'BAIDUID', 'path': '/', 'value': '37ECD490B4A2D652FE0A0C6264F18DBC:FG=1', 'domain': '.baidu.com'}, {'expiry': 2505117350, 'secure': False, 'name': 'KKK', 'path': '/', 'value': 'KKKKK', 'domain': '.baidu.com'}, {'expiry': 3643448997.013932, 'secure': False, 'name': 'PSKK', 'path': '/', 'value': '149KKK', 'domain': '.baidu.com'}, {'expiry': 2556057600, 'secure': False, 'name': 'KK_UID', 'path': '/', 'value': '0667eKKed5bKKKKK06K71', 'domain': '.www.baidu.com'}, {'expiry': 1496829350, 'secure': False, 'name': 'BD_UPN', 'path': '/', 'value': '12KK753', 'domain': 'www.baidu.com'}, {'expiry': 1496051750.065559, 'secure': False, 'name': 'BDORZ', 'path': '/', 'value': 'B490B5EKK15DKDA1598', 'domain': '.baidu.com'}, {'expiry': 1755165348.82662, 'secure': False, 'name': 'BDUSS', 'path': '/', 'value': 'ZsUzhOYzl4bVZFdk94NFlpSmVTTzAKKKKAAAAAAEAAAAGEUIGYWQ5OTYAAAAAKKKKAAAAAAAAAO-eKlnvKZbE', 'domain': '.baidu.com'}, {'secure': False, 'path': '/', 'name': 'BD_HOME', 'domain': 'www.baidu.com', 'value': '1'}, {'expiry': 2442045350, 'secure': False, 'name': 'sug', 'path': '/', 'value': '3', 'domain': '.www.baidu.com'}, {'expiry': 2442045350, 'secure': False, 'name': 'sugstore', 'path': '/', 'value': '0', 'domain': '.www.baidu.com'}, {'expiry': 2442045350, 'secure': False, 'name': 'ORIGIN', 'path': '/', 'value': '0', 'domain': '.www.baidu.com'}, {'expiry': 2442045350, 'secure': False, 'name': 'bdime', 'path': '/', 'value': '0', 'domain': '.www.baidu.com'}, {'expiry': 1495965355.737065, 'secure': False, 'name': '__bsi', 'path': '/', 'value': '170867479KKKK03KKI_0', 'domain': '.www.baidu.com'}]
for i in cookie_list:
    driver.add_cookie(i)
driver.get('http://www.baidu.com')
input('查看是否登錄')

driver.quit()

結(jié)果顯示登錄成功:


8.同一頁面前進(jìn)后退
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
browser.get("https://www.taobao.com/")
browser.back()
time.sleep(1)
browser.forward()
browser.close()

結(jié)果可以看到Chrome先打開百度霎冯,再打開淘寶铃拇,然后后退到百度界面,1s延時(shí)后沈撞,又前進(jìn)到淘寶界面慷荔。

9.新增標(biāo)簽頁
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
browser.execute_script('window.open()')
print(browser.window_handles)
browser.switch_to.window(browser.window_handles[1])
browser.get("https://www.taobao.com")
time.sleep(1)
browser.switch_to.window(browser.window_handles[0])
browser.get("https://python.org")

輸出:

['CDwindow-76A3B191548973631D98C130545D6E0C', 'CDwindow-05DF1132B01F6B6B1590CD7CF849E08A']


現(xiàn)象:
先進(jìn)入百度頁面,然后新建標(biāo)簽頁缠俺,在新建標(biāo)簽頁中進(jìn)入淘寶显晶,然后進(jìn)入原先百度頁面所在的標(biāo)簽頁,進(jìn)入python的官網(wǎng)壹士。
-----------------------------------------------------------------------------------
后續(xù)大概會繼續(xù)更新一些常見的JS函數(shù)磷雇、區(qū)域截圖等等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末墓卦,一起剝皮案震驚了整個(gè)濱河市倦春,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌落剪,老刑警劉巖睁本,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忠怖,居然都是意外死亡呢堰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門凡泣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枉疼,“玉大人,你說我怎么就攤上這事鞋拟÷钗” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵贺纲,是天一觀的道長航闺。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么潦刃? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任侮措,我火速辦了婚禮,結(jié)果婚禮上乖杠,老公的妹妹穿的比我還像新娘分扎。我一直安慰自己,他們只是感情好胧洒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布畏吓。 她就那樣靜靜地躺著,像睡著了一般略荡。 火紅的嫁衣襯著肌膚如雪庵佣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天汛兜,我揣著相機(jī)與錄音巴粪,去河邊找鬼。 笑死粥谬,一個(gè)胖子當(dāng)著我的面吹牛肛根,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漏策,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掺喻!你這毒婦竟也來了芭届?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤感耙,失蹤者是張志新(化名)和其女友劉穎褂乍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體即硼,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逃片,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了只酥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褥实。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖裂允,靈堂內(nèi)的尸體忽然破棺而出损离,到底是詐尸還是另有隱情,我是刑警寧澤绝编,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布草冈,位于F島的核電站,受9級特大地震影響瓮增,放射性物質(zhì)發(fā)生泄漏怎棱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一绷跑、第九天 我趴在偏房一處隱蔽的房頂上張望拳恋。 院中可真熱鬧,春花似錦砸捏、人聲如沸谬运。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梆暖。三九已至,卻和暖如春掂骏,著一層夾襖步出監(jiān)牢的瞬間轰驳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工弟灼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留级解,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓田绑,卻偏偏與公主長得像勤哗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子掩驱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容