都蘭縣建設(shè)局交通局網(wǎng)站seo工具優(yōu)化軟件
目錄
上一篇文章
本章內(nèi)容
設(shè)置瀏覽器為運(yùn)行結(jié)束后不關(guān)閉(可選)
定位到搜索框的xpath地址
執(zhí)行動作
保存為json文件
最后出現(xiàn)頁面
需要注意的問題
所有代碼
總結(jié)
上一篇文章
用python來爬取某魚的商品信息(1/2)_木木em哈哈的博客-CSDN博客本章講理論,后面一節(jié)講代碼拿來練練手的,練練selenium包,實(shí)戰(zhàn)一下(本來想拿來練手的,沒想到他喵的有挺多防爬的,直接開局就困難難度我靠,凸(艸皿艸 ))找到可以爬取的網(wǎng)站然后添加cookie然后刷新界面就可以發(fā)現(xiàn)搜索結(jié)果出來了這一次實(shí)戰(zhàn)經(jīng)歷真的讓我遇到了selenium許多奇奇怪怪的反爬手段,也是讓我可以大幅度提升自己實(shí)戰(zhàn)經(jīng)驗(yàn)的一個經(jīng)歷,前前后后排bug,繞反爬,這一個項(xiàng)目打了整整兩天。累diethttps://blog.csdn.net/mumuemhaha/article/details/132238660?spm=1001.2014.3001.5502
本章內(nèi)容
主要講的是上一章的代碼實(shí)現(xiàn)
導(dǎo)入所需要的程序包
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import json
設(shè)置瀏覽器為運(yùn)行結(jié)束后不關(guān)閉(可選)
之后先設(shè)置自己想要搜索的內(nèi)容,并且把瀏覽器設(shè)置為允許結(jié)束后不關(guān)閉,并且打開要爬取的咸魚網(wǎng)站(可設(shè)可不設(shè))
input_1=input('輸入想要搜索的內(nèi)容:')option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)# 注意此處添加了chrome_options參數(shù)
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://h5.m.goofish.com/app/idleFish-F2e/fish-mini-pha/search.html?spm=a2170.tb_mini_index.0.0')
定位到搜索框的xpath地址
driver_1=driver.find_element(by='xpath',value='/html/body/div/div/div[1]/input')
執(zhí)行動作
執(zhí)行動作(調(diào)用鼠標(biāo)api點(diǎn)擊剛剛定位的搜索框,然后輸入input_1的值并且回車
ActionChains(driver) \.move_to_element(driver_1) \.click_and_hold() \.pause(1) \.send_keys(input_1) \.key_down(Keys.ENTER)\.perform()time.sleep(1)
中間的.pause(1)以及time.sleep(1)是等待一秒鐘的時間(保險起見,怕網(wǎng)頁沒有加載好,或者你設(shè)置一個selenium等待函數(shù)更保險)
獲取cookie
接下來就是獲取cookie,獲取cookie方法上一章講了
?在你的瀏覽器上,下載cookie editor插件登錄,不要用運(yùn)行python時跳出的瀏覽器,正常打開瀏覽器(這樣不會跳驗(yàn)證碼。。。即使跳了也可以手動成功過),導(dǎo)出你的cookie
保存為json文件
然后新建一個json格式的文件并且把它命名為cookie.json
修改cookie的sameSite值并且導(dǎo)入cookie
導(dǎo)入cookie(出錯)
cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:driver.add_cookie(cookie)
但是!!!!
前面講過直接導(dǎo)入會報錯
assert cookie_dict[‘sameSite‘] in [‘Strict‘, ‘Lax‘] AssertionError()
由于這里語法規(guī)定sameSite必須為‘Strict‘, ‘Lax‘兩個之一,不然就報錯
所以我們要遍歷字典,并且把字典中的sameSite設(shè)置為Strict
導(dǎo)入cookie(修改后)
所以代碼改為
cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:if'sameSite' in cookie:cookie['sameSite'] = 'Strict'driver.add_cookie(cookie)
driver.refresh()
注意,導(dǎo)入cookie后要用driver.refresh()刷新
打印源代碼
?然后打印網(wǎng)頁的源代碼,注意要等3秒加載元素(或者用re庫帶的篩選,篩選你想要的的元素,比如商品鏈接,價格,以及介紹)
time.sleep(3)
print(driver.page_source)
最后出現(xiàn)頁面
需要注意的問題
- 首先要說的是這個通過python不如通過app抓包來的穩(wěn)定
- 頁面中你登錄的cookie的失效時間是不確定的,所以你可能需要經(jīng)常更新cookie(看個人情況)
- 無法頻繁(比如5分鐘一次)搜索,否則會跳滑塊驗(yàn)證,或者你有多個賬號也可以搞(大概也就這個流程)
- 寫出來的代碼只是提取出來網(wǎng)頁源代碼——其實(shí)都提取出網(wǎng)頁源代碼了,使用就只有一個篩選了(csdn上有大把的優(yōu)質(zhì)博主和大佬教你通過源代碼過濾有用的信息)
- 當(dāng)然如果需要的話我可以再水一篇博客
- 它理論上可以關(guān)聯(lián)到釘釘機(jī)器人或者是QQ機(jī)器人上實(shí)現(xiàn)定時推送咸魚信息(啊?你問我為什么不繼續(xù)寫?因?yàn)檫€沒學(xué),不然這期標(biāo)題末尾就不是(2/2)而是(2/3)了;咳咳咳...u1s1,釘釘應(yīng)該是有教程教的,傻妞機(jī)器人應(yīng)該也可以執(zhí)行python腳本的,
“按理”來說不會很難實(shí)現(xiàn),實(shí)在不行我再去學(xué)吧(累die...)
所有代碼
所有代碼附上吧
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import jsoninput_1=input('輸入想要搜索的內(nèi)容:')# 不自動關(guān)閉瀏覽器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)# 注意此處添加了chrome_options參數(shù)
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://h5.m.goofish.com/app/idleFish-F2e/fish-mini-pha/search.html?spm=a2170.tb_mini_index.0.0')driver_1=driver.find_element(by='xpath',value='/html/body/div/div/div[1]/input')ActionChains(driver) \.move_to_element(driver_1) \.click_and_hold() \.pause(1) \.send_keys(input_1) \.key_down(Keys.ENTER)\.perform()time.sleep(1)cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:if'sameSite' in cookie:cookie['sameSite'] = 'Strict'driver.add_cookie(cookie)
driver.refresh()time.sleep(3)
print(driver.page_source)
總結(jié)
這些代碼搞得我暈頭轉(zhuǎn)向的,尤其是那個內(nèi)嵌的登錄頁面讓我走了很多彎路,但是對于這個庫的學(xué)習(xí)應(yīng)該也算是初窺門徑吧,如果有大佬有優(yōu)化的地方歡迎指出(真的沒學(xué)多深,很容易出錯的)