selenium
一、前期準(zhǔn)備
1、概述
selenium本身是一個(gè)自動(dòng)化測(cè)試工具。它可以讓python代碼調(diào)用瀏覽器。并獲取到瀏覽器中加載的各種資源。 我們可以利用selenium提供的各項(xiàng)功能。 幫助我們完成數(shù)據(jù)的抓取。
2、學(xué)習(xí)目標(biāo)
-
掌握 selenium發(fā)送請(qǐng)求,加載網(wǎng)頁(yè)的方法
-
掌握 selenium簡(jiǎn)單的元素定位的方法
-
掌握 selenium的基礎(chǔ)屬性和方法
-
掌握 selenium退出的方法
3、安裝
安裝:pip install selenium
它與其他庫(kù)不同的地方是他要啟動(dòng)你電腦上的瀏覽器, 這就需要一個(gè)驅(qū)動(dòng)程序來(lái)輔助.
這里推薦用chrome瀏覽器
chrome驅(qū)動(dòng)地址:http://chromedriver.storage.googleapis.com/index.html
?
根據(jù)你電腦的不同自行選擇吧. win64選win32即可.
然后關(guān)鍵的來(lái)了. 把你下載的瀏覽器驅(qū)動(dòng)放在python解釋器所在的文件夾
Windwos: py -0p 查看Python路徑
Mac: open + 路徑
例如:open /usr/local/bin/
前期準(zhǔn)備工作完畢. 上代碼看看 感受一下selenium
from selenium.webdriver import Chrome ?# 導(dǎo)入谷歌瀏覽器的類
?
?
# 創(chuàng)建瀏覽器對(duì)象
web = Chrome() ?# 如果你的瀏覽器驅(qū)動(dòng)放在了解釋器文件夾
?
web.get("http://www.baidu.com") ?# 輸入網(wǎng)址
print(web.title) ?# 打印title
運(yùn)行一下你會(huì)發(fā)現(xiàn)神奇的事情發(fā)生了. 瀏覽器自動(dòng)打開(kāi)了. 并且輸入了網(wǎng)址. 也能拿到網(wǎng)頁(yè)上的title標(biāo)題.
二、selenium的基本使用
1、加載網(wǎng)頁(yè):
selenium通過(guò)控制瀏覽器,所以對(duì)應(yīng)的獲取的數(shù)據(jù)都是elements中的內(nèi)容
from selenium import webdriver
from selenium.webdriver.common.by import By
?
driver = webdriver.Chrome()
# 訪問(wèn)百度
driver.get("http://www.baidu.com/")
# 截圖
driver.save_screenshot("baidu.png")
2、定位和操作:
# 搜索關(guān)鍵字 杜卡迪
driver.find_element(By.ID, "kw").send_keys("杜卡迪")
# 點(diǎn)擊id為su的搜索按鈕
driver.find_element(By.ID, "su").click()
3、查看請(qǐng)求信息:
driver.page_source ? # 獲取頁(yè)面內(nèi)容
driver.get_cookies()
driver.current_url
4、退出
driver.close() ?# 退出當(dāng)前頁(yè)面
driver.quit() ? # 退出瀏覽器
小結(jié)
-
selenium的導(dǎo)包:
from selenium import webdriver
-
selenium創(chuàng)建driver對(duì)象:
webdriver.Chrome()
-
selenium請(qǐng)求數(shù)據(jù):
driver.get("http://www.baidu.com/")
-
selenium查看數(shù)據(jù):
driver.page_source
-
關(guān)閉瀏覽器:
driver.quit()
-
根據(jù)id定位元素:
driver.find_element_by_id("kw")/driver.find_element(By.ID, "kw")
-
操作點(diǎn)擊事件:
click()
-
給輸入框賦值:
send_keys()
三、元素定位的方法
學(xué)習(xí)目標(biāo)
-
掌握 selenium定位元素的方法
-
掌握 selenium從元素中獲取文本和屬性的方法
通過(guò)selenium的基本使用可以簡(jiǎn)單定位元素和獲取對(duì)應(yīng)的數(shù)據(jù),接下來(lái)我們?cè)賮?lái)學(xué)習(xí)下 定位元素的其他方法
1、selenium的定位操作
-
元素定位的兩種寫(xiě)法:
-
直接調(diào)用型
el = driver.find_element_by_xxx(value) # xxx是定位方式,后面我們會(huì)講,value為該方式對(duì)應(yīng)的值
-
使用By類型(需要導(dǎo)入By) 建議使用這種方式
# 直接掉用的方式會(huì)在底層翻譯成這種方式 from selenium.webdriver.common.by import By driver.find_element(By.xxx,value)
-
-
元素定位的兩種方式:
-
精確定位一個(gè)元素,返回結(jié)果為一個(gè)element對(duì)象,定位不到則報(bào)錯(cuò)
driver.find_element(By.xx, value) ?# 建議使用 driver.find_element_by_xxx(value)
-
定位一組元素,返回結(jié)果為element對(duì)象列表,定位不到返回空列表
driver.find_elements(By.xx, value) ?# 建議使用 driver.find_elements_by_xxx(value)
-
-
元素定位的八種方法:
以下方法在element之后添加s就變成能夠獲取一組元素的方法
-
By.ID 使用id值定位
el = driver.find_element(By.ID, '') el = driver.find_element_by_id() ?
-
By.XPATH 使用xpath定位
el = driver.find_element(By.XPATH, '') el = driver.find_element_by_xpath() ? ? ?
-
By.TAG_NAME. 使用標(biāo)簽名定位
el = driver.find_element(By.TAG_NAME, '') el = driver.find_element_by_tag_name() ? ?
-
By.LINK_TEXT使用超鏈接文本定位
el = driver.find_element(By.LINK_TEXT, '') el = driver.find_element_by_link_text()
-
By.PARTIAL_LINK_TEXT 使用部分超鏈接文本定位
el = driver.find_element(By.PARTIAL_LINK_TEXT , '') el = driver.find_element_by_partial_link_text()
-
By.NAME 使用name屬性值定位
el = driver.find_element(By.NAME, '') el = driver.find_element_by_name()
-
By.CLASS_NAME 使用class屬性值定位
el = driver.find_element(By.CLASS_NAME, '') ? el = driver.find_element_by_class_name()
-
By.CSS_SELECTOR 使用css選擇器定位
el = driver.find_element(By.CSS_SELECTOR, '') ? el = driver.find_element_by_css_selector()
-
注意:
-
建議使用find_element/find_elements
-
find_element
和find_elements
的區(qū)別 -
by_link_text
和by_partial_link_text
的區(qū)別: 全部文本和包含某個(gè)文本
-
使用: 以豆瓣為例
import time from selenium import webdriver from selenium.webdriver.common.by import By ? driver = webdriver.Chrome() driver.implicitly_wait(10) ?# 等待節(jié)點(diǎn)加載完成 driver.get("https://www.douban.com/search?q=%E6%9D%B0%E6%A3%AE%E6%96%AF%E5%9D%A6%E6%A3%AE") time.sleep(2) # 使用id的方式獲取右上角的搜索框 # ret1 = driver.find_element(By.ID, 'inp-query') # ret1 = driver.find_element(By.ID, 'inp-query').send_keys("杰森斯坦森") # ret1 = driver.find_element_by_id("inp-query") # print(ret1) ? # 輸出為:<selenium.webdriver.remote.webelement.WebElement (session="ea6f94544ac3a56585b2638d352e97f3", element="0.5335773935305805-1")> ? # 搜索輸入框 使用find_elements進(jìn)行獲取 # ret2 = driver.find_elements(By.ID, "inp-query") # ret2 = driver.find_elements_by_id("inp-query") # print(ret2) #輸出為:[<selenium.webdriver.remote.webelement.WebElement (session="ea6f94544ac3a56585b2638d352e97f3", element="0.5335773935305805-1")>] ? # 搜索按鈕 使用xpath進(jìn)行獲取 # ret3 = driver.find_elements(By.XPATH, '//*[@id="inp-query"]') # ret3 = driver.find_elements_by_xpath("http://*[@id="inp-query"]") # print(len(ret3)) # print(ret3) ? # 匹配圖片標(biāo)簽 ret4 = driver.find_elements(By.TAG_NAME, 'img') for url in ret4: ? ?print(url.get_attribute('src')) ? #ret4 = driver.find_elements_by_tag_name("img") print(len(ret4)) ? ret5 = driver.find_elements(By.LINK_TEXT, "瀏覽發(fā)現(xiàn)") # ret5 = driver.find_elements_by_link_text("瀏覽發(fā)現(xiàn)") print(len(ret5)) print(ret5) ? ret6 = driver.find_elements(By.PARTIAL_LINK_TEXT, "瀏覽發(fā)現(xiàn)") # ret6 = driver.find_elements_by_partial_link_text("瀏覽發(fā)現(xiàn)") print(len(ret6)) # 使用class名稱查找 ret7 = driver.find_elements(By.CLASS_NAME, 'nbg') print(ret7) driver.close()
注意:
find_element與find_elements區(qū)別
-
只查找一個(gè)元素的時(shí)候:可以使用find_element(),find_elements() find_element()會(huì)返回一個(gè)WebElement節(jié)點(diǎn)對(duì)象,但是沒(méi)找到會(huì)報(bào)錯(cuò),而find_elements()不會(huì),之后返回一個(gè)空列表
-
查找多個(gè)元素的時(shí)候:只能用find_elements(),返回一個(gè)列表,列表里的元素全是WebElement節(jié)點(diǎn)對(duì)象
-
找到都是節(jié)點(diǎn)(標(biāo)簽)
-
如果想要獲取相關(guān)內(nèi)容(只對(duì)find_element()有效,列表對(duì)象沒(méi)有這個(gè)屬性) 使用 .text
-
如果想要獲取相關(guān)屬性的值(如href對(duì)應(yīng)的鏈接等,只對(duì)find_element()有效,列表對(duì)象沒(méi)有這個(gè)屬性):使用 .get_attribute("href")
2、元素的操作
find_element_by_xxx方法僅僅能夠獲取元素對(duì)象,接下來(lái)就可以對(duì)元素執(zhí)行以下操作 從定位到的元素中提取數(shù)據(jù)的方法
-
從定位到的元素中獲取數(shù)據(jù)
el.get_attribute(key) ? ? ? ? ? # 獲取key屬性名對(duì)應(yīng)的屬性值
el.text ? ? ? ? ? ? ? ? ? ? ? # 獲取開(kāi)閉標(biāo)簽之間的文本內(nèi)容
-
對(duì)定位到的元素的操作
el.click() ? ? ? ? ? ? ? ? ? ? ?# 對(duì)元素執(zhí)行點(diǎn)擊操作
?
el.submit() ? ? ? ? ? ? ? ? ? ? # 對(duì)元素執(zhí)行提交操作
?
el.clear() ? ? ? ? ? ? ? ? ? ? ?# 清空可輸入元素中的數(shù)據(jù)
?
el.send_keys(data) ? ? ? ? ? ? ?# 向可輸入元素輸入數(shù)據(jù)
使用示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
?
driver =webdriver.Chrome()
?
driver.get("https://www.douban.com/")
# 打印頁(yè)面內(nèi)容 (獲取到以后可以進(jìn)行后續(xù)的xpath,bs4 或者存儲(chǔ)等)
print(driver.page_source)
?
ret4 = driver.find_elements(By.TAG_NAME, "h1")
print(ret4[0].text)
#輸出:豆瓣
?
ret5 = driver.find_elements(By.LINK_TEXT, "下載豆瓣 App")
print(ret5[0].get_attribute("href"))
#輸出:https://www.douban.com/doubanapp/app?channel=nimingye
?
driver.close()
小結(jié)
-
根據(jù)xpath定位元素:
driver.find_elements(By.XPATH,"http://*[@id='s']/h1/a")
-
根據(jù)class定位元素:
driver.find_elements(By.CLASS_NAME, "box")
-
根據(jù)link_text定位元素:
driver.find_elements(By.LINK_TEXT, "下載豆瓣 App")
-
根據(jù)tag_name定位元素:
driver.find_elements(By.TAG_NAME, "h1")
-
獲取元素文本內(nèi)容:
element.text
-
獲取元素標(biāo)簽屬性:
element.get_attribute("href")
-
向輸入框輸入數(shù)據(jù):
element.send_keys(data)
四、selenium的其他操作
學(xué)習(xí)目標(biāo)
-
掌握 selenium處理cookie等方法
-
掌握 selenium中switch的使用
-
掌握selenium中無(wú)頭瀏覽器的設(shè)置
1、無(wú)頭瀏覽器
我們已經(jīng)基本了解了selenium的基本使用了. 但是呢, 不知各位有沒(méi)有發(fā)現(xiàn), 每次打開(kāi)瀏覽器的時(shí)間都比較長(zhǎng). 這就比較耗時(shí)了. 我們寫(xiě)的是爬蟲(chóng)程序. 目的是數(shù)據(jù). 并不是想看網(wǎng)頁(yè). 那能不能讓瀏覽器在后臺(tái)跑呢? 答案是可以的
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
?
opt = Options()
opt.add_argument("--headless")
opt.add_argument('--disable-gpu')
opt.add_argument("--window-size=4000,1600") ?# 設(shè)置窗口大小
?
web = Chrome(options=opt)
1、selenium 處理cookie
通過(guò)driver.get_cookies()
能夠獲取所有的cookie
-
獲取cookie
dictCookies = driver.get_cookies()
-
設(shè)置cookie
driver.add_cookie(dictCookies)
-
刪除cookue
#刪除一條cookie driver.delete_cookie("CookieName") # 刪除所有的cookie driver.delete_all_cookies()
2、頁(yè)面等待
-
為什么需要等待 如果網(wǎng)站采用了動(dòng)態(tài)html技術(shù),那么頁(yè)面上的部分元素出現(xiàn)時(shí)間便不能確定,這個(gè)時(shí)候就可以設(shè)置一個(gè)等待時(shí)間,強(qiáng)制等待指定時(shí)間,等待結(jié)束之后進(jìn)行元素定位,如果還是無(wú)法定位到則報(bào)錯(cuò)
-
頁(yè)面等待的三種方法
-
強(qiáng)制等待
import time time.sleep(n) ? ? ?# 阻塞等待設(shè)定的秒數(shù)之后再繼續(xù)往下執(zhí)行
-
顯式等待(自動(dòng)化web測(cè)試使用,爬蟲(chóng)基本不用)
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ? WebDriverWait(driver, 10,0.5).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) # 顯式等待指定某個(gè)條件,然后設(shè)置最長(zhǎng)等待時(shí)間10,在10秒內(nèi)每隔0.5秒使用指定條件去定位元素,如果定位到元素則直接結(jié)束等待,如果在10秒結(jié)束之后仍未定位到元素則報(bào)錯(cuò)
-
隱式等待 隱式等待設(shè)置之后代碼中的所有元素定位都會(huì)做隱式等待
driver.implicitly_wait(10) ? ?# 在指定的n秒內(nèi)每隔一段時(shí)間嘗試定位元素,如果n秒結(jié)束還未被定位出來(lái)則報(bào)錯(cuò)
-
注意:
Selenium顯示等待和隱式等待的區(qū)別 1、selenium的顯示等待 原理:顯示等待,就是明確要等到某個(gè)元素的出現(xiàn)或者是某個(gè)元素的可點(diǎn)擊等條件,等不到,就一直等,除非在規(guī)定的時(shí)間之內(nèi)都沒(méi)找到,就會(huì)跳出異常Exception
(簡(jiǎn)而言之,就是直到元素出現(xiàn)才去操作,如果超時(shí)則報(bào)異常)
2、selenium的隱式等待
原理:隱式等待,就是在創(chuàng)建driver時(shí),為瀏覽器對(duì)象創(chuàng)建一個(gè)等待時(shí)間,這個(gè)方法是得不到某個(gè)元素就等待一段時(shí)間,直到拿到某個(gè)元素位置。 注意:在使用隱式等待的時(shí)候,實(shí)際上瀏覽器會(huì)在你自己設(shè)定的時(shí)間內(nèi)部斷的刷新頁(yè)面去尋找我們需要的元素
3、switch方法切換的操作
3.1 一個(gè)瀏覽器肯定會(huì)有很多窗口,所以我們肯定要有方法來(lái)實(shí)現(xiàn)窗口的切換。切換窗口的方法如下:
也可以使用 window_handles 方法來(lái)獲取每個(gè)窗口的操作對(duì)象。例如:
# 1. 獲取當(dāng)前所有的窗口
current_windows = driver.window_handles
?
# 2. 根據(jù)窗口索引進(jìn)行切換
driver.switch_to.window(current_windows[1])
?
driver.switch_to.window(web.window_handles[-1]) ?# 跳轉(zhuǎn)到最后一個(gè)窗口
driver.switch_to.window(current_windows[0]) ?# 回到第一個(gè)窗口
3.2 iframe是html中常用的一種技術(shù),即一個(gè)頁(yè)面中嵌套了另一個(gè)網(wǎng)頁(yè),selenium默認(rèn)是訪問(wèn)不了frame中的內(nèi)容的,對(duì)應(yīng)的解決思路是
driver.switch_to.frame(name/el/id) ? ? 傳入的參數(shù)可以使iframe對(duì)應(yīng)的id值,也可以是用元素定位之后的元素對(duì)象
動(dòng)手:qq郵箱
在使用selenium登錄qq郵箱的過(guò)程中,我們會(huì)發(fā)現(xiàn),無(wú)法在郵箱的登錄input標(biāo)簽中輸入內(nèi)容,通過(guò)觀察源碼可以發(fā)現(xiàn),form表單在一個(gè)frame中,所以需要切換到frame中
3.3 當(dāng)你觸發(fā)了某個(gè)事件之后,頁(yè)面出現(xiàn)了彈窗提示,處理這個(gè)提示或者獲取提示信息方法如下:
alert = driver.switch_to_alert()
4. 頁(yè)面前進(jìn)和后退
driver.forward() ? ? # 前進(jìn)
driver.back() ? ? ? ?# 后退
driver.refresh() # 刷新
driver.close() ? ? ? # 關(guān)閉當(dāng)前窗口
5、設(shè)置瀏覽器最大窗口
driver.maximize_window() #最大化瀏覽器窗口
4、selenium的優(yōu)缺點(diǎn)
-
優(yōu)點(diǎn)
-
selenium能夠執(zhí)行頁(yè)面上的js,對(duì)于js渲染的數(shù)據(jù)和模擬登陸處理起來(lái)非常容易
-
使用難度簡(jiǎn)單
-
爬取速度慢,爬取頻率更像人的行為,天生能夠應(yīng)對(duì)一些反爬措施
-
-
缺點(diǎn)
-
由于selenium操作瀏覽器,因此會(huì)將發(fā)送所有的請(qǐng)求,因此占用網(wǎng)絡(luò)帶寬
-
由于操作瀏覽器,因此占用的內(nèi)存非常大(相比較之前的爬蟲(chóng))
-
速度慢,對(duì)于效率要求高的話不建議使用
-
小結(jié)
-
獲取cookie:
get_cookies()
-
刪除cookie:
delete_all_cookies()
-
切換窗口:
switch_to.window()
-
切換iframe:
switch_to.frame()
5、selenium的配置
selenium啟動(dòng)谷歌瀏覽器的參數(shù)設(shè)置
通知、位置、攝像頭和麥克風(fēng)權(quán)限控制的配置
options = webdriver.ChromeOptions()
options.add_experimental_option("prefs", { \
"profile.default_content_setting_values.media_stream_mic": 1, # 麥克風(fēng) 1:allow, 2:block
"profile.default_content_setting_values.media_stream_camera": 1, # 攝像頭 1:allow, 2:block
"profile.default_content_setting_values.geolocation": 1, # 地理位置 1:allow, 2:block
"profile.default_content_setting_values.notifications": 1, # 通知 1:allow, 2:block
'download.default_directory': download_path # 下載路徑
})
driver = webdriver.Chrome(chrome_options=options)
其他參數(shù)
options.add_argument(‘headless’) # 無(wú)頭模式
options.add_argument(‘window-size={}x{}’.format(width, height)) # 直接配置大小和set_window_size一樣
options.add_argument(‘disable-gpu’) # 禁用GPU加速
options.add_argument(‘proxy-server={}’.format(self.proxy_server)) # 配置代理
options.add_argument(’–no-sandbox’) # 沙盒模式運(yùn)行
options.add_argument(’–disable-setuid-sandbox’) # 禁用沙盒
options.add_argument(’–disable-dev-shm-usage’) # 大量渲染時(shí)候?qū)懭?tmp而非/dev/shm
options.add_argument(’–user-data-dir={profile_path}’.format(profile_path)) # 用戶數(shù)據(jù)存入指定文件
options.add_argument(‘no-default-browser-check) # 不做瀏覽器默認(rèn)檢查
options.add_argument(“–disable-popup-blocking”) # 允許彈窗
options.add_argument(“–disable-extensions”) # 禁用擴(kuò)展
options.add_argument(“–ignore-certificate-errors”) # 忽略不信任證書(shū)
options.add_argument(“–no-first-run”) # 初始化時(shí)為空白頁(yè)面
options.add_argument(’–start-maximized’) # 最大化啟動(dòng)
options.add_argument(’–disable-notifications’) # 禁用通知警告
options.add_argument(’–enable-automation’) # 通知(通知用戶其瀏覽器正由自動(dòng)化測(cè)試控制)
options.add_argument(’–disable-xss-auditor’) # 禁止xss防護(hù)
options.add_argument(’–disable-web-security’) # 關(guān)閉安全策略
options.add_argument(’–allow-running-insecure-content’) # 允許運(yùn)行不安全的內(nèi)容
options.add_argument(’–disable-webgl’) # 禁用webgl
options.add_argument(’–homedir={}’) # 指定主目錄存放位置
options.add_argument(’–disk-cache-dir={臨時(shí)文件目錄}’) # 指定臨時(shí)文件目錄
options.add_argument(‘disable-cache’) # 禁用緩存
options.add_argument(‘excludeSwitches’, [‘enable-automation’]) # 開(kāi)發(fā)者模式
options.add_argument(’–disable-infobars’) # 禁止策略化
options.add_argument(‘–incognito’) # 隱身模式(無(wú)痕模式)
options.add_argument(‘–disable-javascript’) # 禁用javascript
options.add_argument(‘–hide-scrollbars’) # 隱藏滾動(dòng)條, 應(yīng)對(duì)一些特殊頁(yè)面
options.add_argument(‘blink-settings=imagesEnabled=false’) # 不加載圖片, 提升速度
options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手動(dòng)指定使用的瀏覽器位置
options.add_argument(‘lang=en_US’) # 設(shè)置語(yǔ)言
prefs = {“”:“”}
prefs[“credentials_enable_service”] = False
prefs[“profile.password_manager_enabled”] = False
chrome_option_set.add_experimental_option(“prefs”, prefs) # 屏蔽’保存密碼’提示框
更多flags參數(shù)請(qǐng)參考:[https://blog.alanwei.com/blog/2021/03/15/chrome-flags/]
其他配置方式
可以自己復(fù)制谷歌瀏覽器的配置文件夾修改,并在啟動(dòng)時(shí)指定使用的文件夾
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
options.add_argument("user-data-dir=C:\\Users\\username\\AppData\\Local\\Google\\Chrome\\User Data\\Default")
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://ceshiren.com")
使用同一個(gè)瀏覽器進(jìn)行多次操作
首先用cmd從谷歌瀏覽器目錄以指定端口啟動(dòng)瀏覽器:
chrome.exe --remote-debugging-port=12306
再在腳本中使用參數(shù)來(lái)獲取連接,這樣就可以一直使用命令行打開(kāi)的谷歌瀏覽器進(jìn)行操作文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-837414.html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:12306")
driver = webdriver.Chrome(options=options)
?上面的參數(shù)很多不是經(jīng)常用到或者在selenium操作過(guò)程中使用,所以這里并沒(méi)有驗(yàn)證,供大家參考。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-837414.html
數(shù)據(jù)采集高級(jí)動(dòng)態(tài)頁(yè)面Selenium
到了這里,關(guān)于python爬蟲(chóng)之selenium知識(shí)點(diǎn)記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!