2019-06-18 python day-06

今日內(nèi)容:

1.selenium相關(guān)操作

2.selenium登錄破解

3.爬取京東商品信息

4.破解滑動驗證碼的邏輯



1.selenium相關(guān)操作

? ? (1)搭配使用xpath

from selenium import webdriver

import time

'''

<html>

<head>

? <base />

? <title>Example website</title>

</head>

<body>

? <div id='images'>

? <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>

? <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>

? <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>

? <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>

? <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>

? </div>

</body>

</html>

'''

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

try:

? ? # 隱式等待寫在get請求前

? ? driver.implicitly_wait(5)

? ? driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html')

? ? # 顯示等待寫在get請求后

? ? html = driver.find_element_by_xpath('/html')

? ? print(html.tag_name)

? ? # 從根節(jié)點開始找任意一個節(jié)點

? ? div = driver.find_element_by_xpath('//div')

? ? print(div.tag_name)

? ? # 查找id為images的節(jié)點

? ? # div = driver.find_element_by_xpath('div[@id="images"]')

? ? # print(div.tag_name)

? ? # print(div.text)

? ? # 找到第一個a標簽

? ? a = driver.find_element_by_xpath('//a')

? ? print(a)

? ? # 找到所有a標簽

? ? a_s = driver.find_elements_by_xpath('//a')

? ? print(a_s)

? ? # 找到第一個a節(jié)點的href屬性

? ? a = driver.find_element_by_xpath('//a').get_attribute('href')

? ? print(a)

? ? time.sleep(5)

finally:

? ? driver.close()

?(2)元素交互操作

-1點擊酌畜,清除博其,搜索

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

try:

? ? driver.implicitly_wait(5)

? ? driver.get('https://www.jd.com/')

? ? input_tag =driver.find_element_by_id('key')

? ? input_tag.send_keys('圍城')

? ? input_tag.send_keys(Keys.ENTER)

? ? time.sleep(2)

? ? input_tag = driver.find_element_by_id('key')

? ? input_tag.clear()

? ? input_tag.send_keys('航海王')

? ? button = driver.find_element_by_class_name('button')

? ? button.click()

? ? time.sleep(10)

finally:

? ? driver.close()

-2獲取cookies

from selenium import webdriver

import time

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

try:

? ? driver.implicitly_wait(10)

? ? driver.get('https://www.zhihu.com/explore')? ?

? ? print(driver.get_cookies())

? ? time.sleep(10)

finally:

? ? driver.close()

-3?選項卡

import time

from selenium import webdriver

browser = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

browser.get('https://www.baidu.com')

browser.execute_script('window.open()')

print(browser.window_handles) #get all xuanxiangka

browser.switch_to_window(browser.window_handles[1])

browser.get('https://www.taobao.com')

time.sleep(10)

browser.switch_to_window(browser.window_handles[0])

browser.get('https://www.sina.com.cn')

browser.close()

-4動作鏈

from selenium import webdriver

from selenium.webdriver import ActionChains

import time

driver = webdriver.Chrome()

driver.implicitly_wait(10)

driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

try:

? ? # driver.switch_to_frame('iframeResult')

? ? # 切換到id為iframeResult的窗口內(nèi)

? ? driver.switch_to.frame('iframeResult')

? ? # 源位置

? ? draggable = driver.find_element_by_id('draggable')

? ? # 目標位置

? ? droppable = driver.find_element_by_id('droppable')

? ? # 調(diào)用ActionChains贸弥,必須把驅(qū)動對象傳進去

? ? # 得到一個動作鏈對象蔗喂,復(fù)制給一個變量

? ? actions = ActionChains(driver)

? ? # 方式一: 機器人

? ? # 瞬間把源圖片位置秒移到目標圖片位置

? ? # actions.drag_and_drop(draggable, droppable)? # 編寫一個行為

? ? # actions.perform()? # 執(zhí)行編寫好的行為

? ? # 方式二: 模擬人的行為

? ? source = draggable.location['x']

? ? target = droppable.location['x']

? ? print(source, target)

? ? distance = target - source

? ? print(distance)

? ? # perform:每個動作都要調(diào)用perform執(zhí)行

? ? # 點擊并摁住源圖片

? ? ActionChains(driver).click_and_hold(draggable).perform()

? ? s = 0

? ? while s < distance:

? ? ? ? # 執(zhí)行位移操作

? ? ? ? ActionChains(driver).move_by_offset(xoffset=2, yoffset=0).perform()

? ? ? ? s += 2

? ? # 釋放動作鏈

? ? ActionChains(driver).release().perform()

? ? time.sleep(10)

finally:

? ? driver.close()

-5前進浓体,后退

from selenium import webdriver

import time

driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

try:

? ? driver.implicitly_wait(10)

? ? driver.get('https://www.jd.com/')

? ? driver.get('https://www.baidu.com/')

? ? driver.get('https://www.cnblogs.com/')

? ? time.sleep(2)

? ? # 回退操作

? ? driver.back()

? ? time.sleep(1)

? ? # 前進操作

? ? driver.forward()

? ? time.sleep(1)

? ? driver.back()

? ? time.sleep(10)

finally:

? ? driver.close()

2.selenium登錄破解

# 由于selenium 驅(qū)動瀏覽器無緩存

#如何給selenium驅(qū)動的瀏覽器加緩存(cookie)避免登錄

from selenium import webdriver

from selenium.webdriver import ChromeOptions

import time

options = ChromeOptions()

profile_directory = r'--user-data-dir=(填寫chrome存放cookie的位置)'

options.add_argument(profile_directory)

driver = webdriver.Chrome(chrome_options=options)

try:

? ? driver.implicitly_wait(10)

? ? driver.get('https://www.baidu.com/')

? ? # 添加用戶cookies信息

? ? # name攒菠、value必須小寫

? ? driver.add_cookie({"name": "BDUSS", "value": (value的值請在網(wǎng)頁的響應(yīng)頭中自行獲取})

? ? # 刷新操作

? ? driver.refresh()

? ? time.sleep(10)

finally:

? ? driver.close()

3.爬取京東商品信息

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

def get_good(driver):

? ? try:


? ? ? ? # 通過JS控制滾輪滑動獲取所有商品

? ? ? ? js_code = '''

? ? ? ? ? ? window.scrollTo(0,50000);

? ? ? ? '''

? ? ? ? driver.execute_script(js_code)

? ? ? ? time.sleep(2)

? ? ? ? #查找所有商品div

? ? ? ? # good_div = driver.find_element_by_class_id('J_goodList')

? ? ? ? good_list = driver.find_elements_by_class_name('gl-item')

? ? ? ? for good in good_list:

? ? ? ? ? ? # 商品鏈接

? ? ? ? ? ? good_link = driver.find_element_by_css_selector(' .p-img').get_attribute('href')

? ? ? ? ? ? # 商品名稱

? ? ? ? ? ? good_name = driver.find_element_by_css_selector('.p-name em').text.replace("\n",'--')

? ? ? ? ? ? # 商品價格

? ? ? ? ? ? good_price = driver.find_element_by_class_name('p-price').text.replace('\n',':')

? ? ? ? ? ? # 評價人數(shù)

? ? ? ? ? ? comment_num = driver.find_element_by_class_name('p-commit').text.replace('\n',' ')

? ? ? ? ? ? good_content = f'''

? ? ? ? ? ? ? ? ? ? ? ? ? ? 商品鏈接:{good_link}

? ? ? ? ? ? ? ? ? ? ? ? ? ? 商品名稱:{good_name}

? ? ? ? ? ? ? ? ? ? ? ? ? ? 商品價格:{good_price}

? ? ? ? ? ? ? ? ? ? ? ? ? ? 評價人數(shù):{comment_num}

? ? ? ? ? ? ? ? ? ? ? ? ? ? '''

? ? ? ? ? ? print(good_content)

? ? ? ? next_tag = driver.find_element_by_class_name('pn-next')? ? ?

? ? ? ? next_tag.click()

? ? ? ? time.sleep(2)

? ? ? ? get_good(driver)

? ? ? ? time.sleep(5)

? ? finally:

? ? ? ? driver.close()


if __name__ == "__main__":

? ? good_tag = input("請輸入想查找的商品:")

? ? driver = webdriver.Chrome(r'/Users/nadia/Downloads/chromedriver')

? ? driver.implicitly_wait(10)

? ? ? ? # 1.往jd發(fā)送請求? ?

? ? driver.get("https://www.jd.com/")

? ? ? ? # 輸入商品名稱寇僧,并回車搜索

? ? input_tag = driver.find_element_by_id('key')

? ? input_tag.send_keys(good_tag)

? ? input_tag.send_keys(Keys.ENTER)

? ? time.sleep(2)

? ? get_good(driver)

4.破解滑動驗證碼的邏輯


滑動驗證碼


破解邏輯


破解示意圖
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亚情,一起剝皮案震驚了整個濱河市妄痪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌楞件,老刑警劉巖衫生,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異土浸,居然都是意外死亡罪针,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門黄伊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泪酱,“玉大人,你說我怎么就攤上這事还最∧狗В” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵拓轻,是天一觀的道長斯撮。 經(jīng)常有香客問我,道長扶叉,這世上最難降的妖魔是什么吮成? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮辜梳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泳叠。我一直安慰自己作瞄,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布危纫。 她就那樣靜靜地躺著宗挥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪种蝶。 梳的紋絲不亂的頭發(fā)上契耿,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音螃征,去河邊找鬼搪桂。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的踢械。 我是一名探鬼主播酗电,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼内列!你這毒婦竟也來了撵术?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤话瞧,失蹤者是張志新(化名)和其女友劉穎嫩与,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體交排,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡划滋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了个粱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片古毛。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖都许,靈堂內(nèi)的尸體忽然破棺而出稻薇,到底是詐尸還是另有隱情,我是刑警寧澤胶征,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布塞椎,位于F島的核電站,受9級特大地震影響睛低,放射性物質(zhì)發(fā)生泄漏案狠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一钱雷、第九天 我趴在偏房一處隱蔽的房頂上張望骂铁。 院中可真熱鬧,春花似錦罩抗、人聲如沸拉庵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钞支。三九已至,卻和暖如春操刀,著一層夾襖步出監(jiān)牢的瞬間烁挟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工骨坑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撼嗓,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像静稻,于是被迫代替她去往敵國和親警没。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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