公司手機(jī)網(wǎng)站制作seo收費(fèi)標(biāo)準(zhǔn)
1.selenium自動(dòng)化
selenium可以操作瀏覽器,在瀏覽器頁面上實(shí)現(xiàn):點(diǎn)擊、輸入、滑動(dòng) 等操作。
不同于selenium自動(dòng)化,逆向本質(zhì)是:
- 分析請求,例如:請求方法、請求參數(shù)、加密方式等。
- 用代碼模擬請求去實(shí)現(xiàn)同等功能。
逆向 vs 自動(dòng)化Selenium
- Selenium,【優(yōu)】簡單不需要逆向,只需要控制瀏覽器去執(zhí)行預(yù)設(shè)的操作即可;【缺點(diǎn)】性能差,不利于批量實(shí)現(xiàn)
- 逆向, 【優(yōu)】算法逆向出來后,性能好且利于批量實(shí)現(xiàn); 【缺點(diǎn)】語法難搞的js加密算法,不容易逆向
2.必備操作
2.1 模塊 & 驅(qū)動(dòng)
-
安裝模塊
pip install selenium
-
下載驅(qū)動(dòng)
Selenium想要控制谷歌、火狐、IE、Edage等瀏覽器,必須要使用對應(yīng)的驅(qū)動(dòng)才行。【Selenium】->【驅(qū)動(dòng)】->【瀏覽器】【Selenium】->【火狐驅(qū)動(dòng)】->【火狐瀏覽器】【Selenium】->【谷歌驅(qū)動(dòng)】->【谷歌瀏覽器】谷歌驅(qū)動(dòng)的下載:114及之前版本: http://chromedriver.storage.googleapis.com/index.html117/118/119版本: https://googlechromelabs.github.io/chrome-for-testing/瀏覽器版本的獲取:在谷歌瀏覽器上訪問 chrome://version/ 例如:119.0.6045.200 (正式版本) (64 位) (cohort: Stable)
-
快速使用
import time from selenium import webdriver from selenium.webdriver.chrome.service import Serviceservice = Service("driver/chromedriver.exe") driver = webdriver.Chrome(service=service)driver.get('https://passport.bilibili.com/login')time.sleep(5) driver.close()
2.2 尋找標(biāo)簽
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('打開網(wǎng)址')# find_element find_elements
tag = driver.find_element(By.ID, "user")
tag = driver.find_element(By.CLASS_NAME, "c1")
tag = driver.find_element(By.TAG_NAME, "div")
tag = driver.find_element(By.XPATH, "/html/body/div[1]/div/div[2]/div[3]/div[3]/div/div/div/div[1]/span[2]")
tag = driver.find_element(By.XPATH, '//*[@id="geetest-wrap"]//input[@name="tel"]')tag_list = driver.find_elements(By.XPATH, "/html/body/div/div[2]/div/div[2]/div/div[2]/div[2]/div/div/div/div/div[2]/a")
for tag in tag_list:print(tag)time.sleep(5)
driver.close()
示例:5xclass.cn
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://www.5xclass.cn/')# 根據(jù)ID尋找
tag = driver.find_element(By.ID, "bs-example-navbar-collapse-1")
print(tag.text)
print(10 * "-")# 根據(jù)類名尋找
tags = driver.find_elements(By.CLASS_NAME, "panel-heading")
for tag in tags:print(tag.text)
print(10 * "-")# 根據(jù)標(biāo)簽名稱尋找
tags = driver.find_elements(By.TAG_NAME, "li")
for tag in tags:print(tag.text)
print(10 * "-")# 根據(jù)XPATH尋找
tag = driver.find_element(By.XPATH, "/html/body/div/div[2]/div/div[2]/div/div[2]/div[1]")
print(tag.text)
print(10 * "-")# 根據(jù)XPATH尋找
tag = driver.find_element(By.XPATH, '//*[@id="bs-example-navbar-collapse-1"]/ul[1]/li[1]/a')
print(tag.text)
print(10 * "-")# 根據(jù)XPATH尋找多個(gè)
tags = driver.find_elements(By.XPATH, '/html/body/div/div[2]/div/div[2]/div/div[2]/div[2]/div/div/div/div/div[2]/a')
for tag in tags:print(tag.text)
print(10 * "-")# 根據(jù)父子關(guān)系嵌套尋找
parent = driver.find_element(By.XPATH, '/html/body/div/div[2]/div/div[2]/div/div[2]/div[2]/div/div/div/div')
tags = parent.find_elements(By.XPATH, "div[@class='course']/a")
for tag in tags:print(tag.text)time.sleep(5)
driver.close()
2.3 執(zhí)行操作
常見的執(zhí)行操作:點(diǎn)擊、輸入
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://passport.bilibili.com/login')# 1.點(diǎn)擊短信登錄
time.sleep(3)
sms_btn = driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]'
)
sms_btn.click() # 點(diǎn)擊# 2.輸入賬號
phone_txt = driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[1]/input'
)
phone_txt.send_keys("18630087660") # 輸入time.sleep(55)
driver.close()
2.4 執(zhí)行JavaScript
如果【選擇標(biāo)簽】【執(zhí)行操作】這種操作起來比較繁瑣,也可以直接在頁面上去執(zhí)行js代碼實(shí)現(xiàn)功能。
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://passport.bilibili.com/login')# ############# 1.點(diǎn)擊短信登錄 #############
time.sleep(3)
sms_btn = driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]'
)
sms_btn.click()# ############# 2.輸入賬號 #############
phone_txt = driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[1]/input'
)
phone_txt.send_keys("18630087660")# ############# 3.選擇國家 #############
time.sleep(2)
driver.execute_script('document.querySelector(".area-code-select").children[18].click()')# ############# 4.讀取cookie #############
data_string = driver.execute_script('return document.cookie;') # return document.title;
print(data_string)# ############# 5.讀取cookie #############
cookie_list = driver.get_cookies()
print(cookie_list)time.sleep(2550)
driver.close()
2.5 等待
如果頁面加載比較慢,需要等待某個(gè)元素加載成功后,再執(zhí)行某些操作。
示例1:基于lambda表達(dá)式
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWaitservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://passport.bilibili.com/login')# ############# 方式1:點(diǎn)擊短信登錄 #############
time.sleep(3)
sms_btn = driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]'
)
sms_btn.click()# ############# 方式2:點(diǎn)擊短信登錄(推薦) #############
sms_btn = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]'
))
sms_btn.click()
示例2:自定義函數(shù)
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWaitservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://passport.bilibili.com/login')def func(dv):print("無返回值,則間隔0.5s執(zhí)行一次此函數(shù);如有返回值,則復(fù)制給sms_btn變量")# <div xxx="123" id="uuu"></div># <img src="..."/>tag = dv.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]')img_src = tag.get_attribute("xxx")if img_src:return tagreturnsms_btn = WebDriverWait(driver, 30, 0.5).until(func)
sms_btn.click()time.sleep(250)
driver.close()
2.4 執(zhí)行JavaScript
如果【選擇標(biāo)簽】【執(zhí)行操作】這種操作起來比較繁瑣,也可以直接在頁面上去執(zhí)行js代碼實(shí)現(xiàn)功能。
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://passport.bilibili.com/login')# ############# 1.點(diǎn)擊短信登錄 #############
time.sleep(3)
sms_btn = driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]'
)
sms_btn.click()# ############# 2.輸入賬號 #############
phone_txt = driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[2]/div[1]/div[1]/input'
)
phone_txt.send_keys("18630087660")# ############# 3.選擇國家 #############
time.sleep(2)
driver.execute_script('document.querySelector(".area-code-select").children[18].click()')# ############# 4.讀取cookie #############
data_string = driver.execute_script('return document.cookie;') # return document.title;
print(data_string)# ############# 5.讀取cookie #############
cookie_list = driver.get_cookies()
print(cookie_list)time.sleep(2550)
driver.close()
2.5 等待
如果頁面加載比較慢,需要等待某個(gè)元素加載成功后,再執(zhí)行某些操作。
示例1:基于lambda表達(dá)式
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWaitservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://passport.bilibili.com/login')# ############# 方式1:點(diǎn)擊短信登錄 #############
time.sleep(3)
sms_btn = driver.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]'
)
sms_btn.click()# ############# 方式2:點(diǎn)擊短信登錄(推薦) #############
sms_btn = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]'
))
sms_btn.click()
示例2:自定義函數(shù)
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWaitservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://passport.bilibili.com/login')def func(dv):print("無返回值,則間隔0.5s執(zhí)行一次此函數(shù);如有返回值,則復(fù)制給sms_btn變量")# <div xxx="123" id="uuu"></div># <img src="..."/>tag = dv.find_element(By.XPATH,'//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]')img_src = tag.get_attribute("xxx")if img_src:return tagreturnsms_btn = WebDriverWait(driver, 30, 0.5).until(func)
sms_btn.click()time.sleep(250)
driver.close()
示例3:全局配置
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)# 后續(xù)找元素時(shí),沒找到時(shí)則等待10去尋找(一旦找到則繼續(xù))
driver.implicitly_wait(30)driver.get('https://passport.bilibili.com/login')sms_btn = driver.find_element(By.XPATH,# '//*[@id="app"]/div[2]/div[2]/div[3]/div[1]/div[3]''//*[@id="xxxxxxxxxapp"]/div[2]/div[2]/div[3]/div[1]/div[3]'
)
sms_btn.click()
print("找到了")
time.sleep(250)
driver.close()
2.6 獲取值
當(dāng)找到某個(gè)標(biāo)簽之后,想要獲取標(biāo)簽內(nèi)部值。
示例1:文本和屬性
例如:<a id='x1' class="info mine" href="5xclass.cn">武沛齊</a>
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
service = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.implicitly_wait(10)driver.get('https://www.5xclass.cn')tag = driver.find_element(By.XPATH,'/html/body/div/div[2]/div/div[2]/div/div[2]/div[2]/div/div/div/div/div[2]/a[1]'
)
print(tag.text)
print(tag.get_attribute("target"))
print(tag.get_attribute("data-toggle"))driver.close()
示例2:獲取值
例如:<input type='text' value="?" placeholder="?" />
例如:<select ><option value='1'>北京</option> </option value='2'>上海</option> </select>
,獲取select標(biāo)簽的value屬性
import timefrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.implicitly_wait(10)driver.get('https://www.bilibili.com/')time.sleep(10)tag = driver.find_element(By.XPATH,'//*[@id="nav-searchform"]/div[1]/input'
)
print(tag)
print(tag.text)
print(tag.get_attribute("placeholder"))
print(tag.get_attribute("value"))time.sleep(1000)
driver.close()
示例3:選擇相關(guān)
<input type="radio" name="findcar" value="1" checked="">新車
<input type="radio" name="findcar" value="2">二手機(jī)
import timefrom selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import Byservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.implicitly_wait(10)driver.get('https://www.autohome.com.cn/beijing/')# ############### 1.單獨(dú)找到每一個(gè) ###############
tag = driver.find_element(By.XPATH,'/html/body/div[1]/div[11]/div[2]/div[1]/div[1]/label[1]/span/input'
)
print(tag.get_property("checked")) # Truetag = driver.find_element(By.XPATH,'/html/body/div[1]/div[11]/div[2]/div[1]/div[1]/label[2]/span/input'
)
print(tag.get_property("checked")) # False# ############### 2.循環(huán)找到每一個(gè) ###############
parent = driver.find_element(By.XPATH,'/html/body/div[1]/div[11]/div[2]/div[1]/div[1]'
)tag_list = parent.find_elements(By.XPATH,'label/span/input'
)
for tag in tag_list:print( tag.get_property("checked"), tag.get_attribute("value") )driver.close()
2.7 源碼+bs4
打開頁面后,如果基于selenium不太容易定位和尋找,也可以結(jié)合bs4來進(jìn)行尋找。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoupservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.implicitly_wait(10)driver.get('https://car.yiche.com/')html_string = driver.page_sourcesoup = BeautifulSoup(html_string, features="html.parser")
tag_list = soup.find_all(name="div", attrs={"class": "item-brand"})
for tag in tag_list:child = tag.find(name='div', attrs={"class": "brand-name"})print(child.text)driver.close()
2.8 攜帶Cookie
driver.add_cookie({'name': 'foo', 'value': 'bar'})
import timefrom selenium import webdriver
from selenium.webdriver.chrome.service import Serviceservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)# 注意:一定要先訪問,不然Cookie無法生效
driver.get('https://dig.chouti.com/about')# 加cookie
driver.add_cookie({'name': 'token','value': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJjZHVfNDU3OTI2NDUxNTUiLCJleHBpcmUiOiIxNzA0MzI5NDY5OTMyIn0.8n_tWcEHXsBSXWIY9rBoGWwaLPF8iWIruryhKTe5_ks'
})# 再訪問
driver.get('https://dig.chouti.com/')time.sleep(2000)
driver.close()
2.9 IP檢測和代理
如果網(wǎng)站進(jìn)行了IP訪問限制,例如:每個(gè)IP每天只能操作5次。此時(shí)可以選擇購買IP,然后在請求時(shí)添加代理IP即可,具體步驟:
- 購買IP
- 登錄購買IP渠道的后臺,配置自己IP白名單
- 代碼攜帶代理
import time
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Service# 換成自己生成的代理
res = requests.get(url="https://dps.kdlapi.com/api/getdps/?secret_id=o60wwtxvs5ukaqqz18ai&num=1&signature=i6s9shfjfiogat5ijecbyfwwc5grwrzj&pt=1&format=json&sep=1")
proxy_string = res.json()['data']['proxy_list'][0]
print(f"獲取代理:{proxy_string}") # "182.106.136.218:40192"service = Service("driver/chromedriver.exe")opt = webdriver.ChromeOptions()
# opt.add_argument(f'--proxy-server=222.89.70.40:40001') # 代理
opt.add_argument(f'--proxy-server={proxy_string}') # 代理
driver = webdriver.Chrome(service=service, options=opt)driver.get('https://myip.ipip.net/')time.sleep(2000)
driver.close()
2.10 特征檢測
有些網(wǎng)站為了防止selenium,會檢測特征,并禁止訪問。
如果想要正常使用selenium訪問,那就需要隱藏瀏覽器相關(guān)的特征。
import time
import requests
from selenium import webdriver
from selenium.webdriver.chrome.service import Serviceservice = Service("driver/chromedriver.exe")opt = webdriver.ChromeOptions()opt.add_argument('--disable-infobars')
opt.add_experimental_option("excludeSwitches", ["enable-automation"])
opt.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(service=service, options=opt)# Selenium在打開任何頁面之前,先運(yùn)行這個(gè)Js文件。
with open('driver/hide.js') as f:driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": f.read()})driver.get('https://www.5xclass.cn')time.sleep(2000)
driver.close()
2.11 無頭和其他
如果不想顯示展示在瀏覽器上的操作,只想偷偷的在后臺運(yùn)行。
opt.add_argument('--headless')
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Serviceservice = Service("driver/chromedriver.exe")
opt = webdriver.ChromeOptions()
opt.add_argument('--headless')
driver = webdriver.Chrome(service=service, options=opt)driver.get('https://www.5xclass.cn')
tag = driver.find_element(By.XPATH,'/html/body/div/div[2]/div/div[2]/div/div[2]/div[2]/div/div/div/div/div[2]/a[1]'
)
print(tag.text)
print(tag.get_attribute("target"))
print(tag.get_attribute("data-toggle"))driver.close()
其他配置:
opt.add_argument('--disable-infobars') # 禁止策略化
opt.add_argument('--no-sandbox') # 解決DevToolsActivePort文件不存在的報(bào)錯(cuò)
opt.add_argument('window-size=1920x3000') # 指定瀏覽器分辨率
opt.add_argument('--disable-gpu') # 谷歌文檔提到需要加上這個(gè)屬性來規(guī)避bug
opt.add_argument('--incognito') # 隱身模式(無痕模式)
opt.add_argument('--disable-javascript') # 禁用javascript
opt.add_argument('--start-maximized') # 最大化運(yùn)行(全屏窗口),不設(shè)置,取元素會報(bào)錯(cuò)
opt.add_argument('--hide-scrollbars') # 隱藏滾動(dòng)條, 應(yīng)對一些特殊頁面
opt.add_argument('lang=en_US') # 設(shè)置語言
opt.add_argument('blink-settings=imagesEnabled=false') # 不加載圖片, 提升速度
opt.add_argument('User-Agent=Mozilla/5.0 (Linux; U; Androi....') # 設(shè)置User-Agent
opt.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手動(dòng)指定使用的瀏覽器位置
2.12 截屏
找到某個(gè)標(biāo)簽后,可以通過截圖的形式保存圖片。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Serviceservice = Service("driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)driver.get('https://www.5xclass.cn')
tag = driver.find_element(By.XPATH,'/html/body/div/div[2]/div/div[2]/div/div[2]'
)# 截圖&保存
tag.screenshot("demo.png")# 截圖&圖片內(nèi)容
body = tag.screenshot_as_png
print(body)# 截圖&Base64編碼格式圖片內(nèi)容
b64_body = tag.screenshot_as_base64
print(b64_body)driver.close()
3.案例:x東搜索
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service# 換成自己生成的代理
res = requests.get(url="https://dps.kdlapi.com/api/getdps/?secret_id=o60wwtxvs5ukaqqz18ai&num=1&signature=i6s9shfjfiogat5ijecbyfwwc5grwrzj&pt=1&format=json&sep=1")
proxy_string = res.json()['data']['proxy_list'][0]
print(f"獲取代理:{proxy_string}")service = Service("driver/chromedriver.exe")
opt = webdriver.ChromeOptions()opt.add_argument(f'--proxy-server={proxy_string}') # 代理
opt.add_argument('blink-settings=imagesEnabled=false') # 不加載圖片opt.add_argument('--disable-infobars')
opt.add_experimental_option("excludeSwitches", ["enable-automation"])
opt.add_experimental_option('useAutomationExtension', False)driver = webdriver.Chrome(service=service, options=opt)driver.implicitly_wait(10)with open('driver/hide.js') as f:driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": f.read()})# 1.打開京東
driver.get('https://www.jd.com/')# 2.搜索框+輸入
tag = driver.find_element(By.XPATH,'//*[@id="key"]'
)
tag.send_keys("iphone手機(jī)")# 3.點(diǎn)擊搜索
tag = driver.find_element(By.XPATH,'//*[@id="search"]/div/div[2]/button'
)
tag.click()# 4.查詢列表
tag_list = driver.find_elements(By.XPATH,'//*[@id="J_goodsList"]/ul/li'
)
for tag in tag_list:# title = tag.find_element(By.XPATH, 'div/div[@class="p-name p-name-type-2"]//em').texttitle = tag.find_element(By.XPATH, 'div/div[@class="p-name p-name-type-2"]/a/em').textprint(title)driver.close()
4.案例:x麥網(wǎng)
import timeimport requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service# 換成自己生成的代理
res = requests.get(url="https://dps.kdlapi.com/api/getdps/?secret_id=o60wwtxvs5ukaqqz18ai&num=1&signature=i6s9shfjfiogat5ijecbyfwwc5grwrzj&pt=1&format=json&sep=1")
proxy_string = res.json()['data']['proxy_list'][0]
print(f"獲取代理:{proxy_string}")service = Service("driver/chromedriver.exe")
opt = webdriver.ChromeOptions()
opt.add_argument(f'--proxy-server={proxy_string}') # 代理
opt.add_argument('blink-settings=imagesEnabled=false')
opt.add_argument('--disable-infobars')
opt.add_experimental_option("excludeSwitches", ["enable-automation"])
opt.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(service=service, options=opt)
driver.implicitly_wait(10)
with open('driver/hide.js') as f:driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": f.read()})# 1.打開大麥網(wǎng)
driver.get('https://www.damai.cn/')# 2.搜索框+輸入
tag = driver.find_element(By.XPATH,'//input[@class="input-search"]'
)
tag.send_keys("周杰倫")# 3.點(diǎn)擊搜索
tag = driver.find_element(By.XPATH,'//div[@class="btn-search"]'
)
tag.click()# 4.查詢列表
tag_list = driver.find_elements(By.XPATH,'//div[@class="search__itemlist"]//div[@class="items"]'
)
for tag in tag_list:title = tag.find_element(By.XPATH, 'div[@class="items__txt"]/div[1]/a').textprint(title)time.sleep(2000)
driver.close()
如果不加代理,訪問頻繁時(shí)會提示驗(yàn)證碼