国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python爬蟲(chóng)之selenium知識(shí)點(diǎn)記錄

這篇具有很好參考價(jià)值的文章主要介紹了python爬蟲(chóng)之selenium知識(shí)點(diǎn)記錄。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

selenium

一、前期準(zhǔn)備

1、概述

selenium本身是一個(gè)自動(dòng)化測(cè)試工具。它可以讓python代碼調(diào)用瀏覽器。并獲取到瀏覽器中加載的各種資源。 我們可以利用selenium提供的各項(xiàng)功能。 幫助我們完成數(shù)據(jù)的抓取。

2、學(xué)習(xí)目標(biāo)

  1. 掌握 selenium發(fā)送請(qǐng)求,加載網(wǎng)頁(yè)的方法

  2. 掌握 selenium簡(jiǎn)單的元素定位的方法

  3. 掌握 selenium的基礎(chǔ)屬性和方法

  4. 掌握 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

python爬蟲(chóng)之selenium知識(shí)點(diǎn)記錄,案例,selenium框架,python,python,爬蟲(chóng),selenium

python爬蟲(chóng)之selenium知識(shí)點(diǎn)記錄,案例,selenium框架,python,python,爬蟲(chóng),selenium?

根據(jù)你電腦的不同自行選擇吧. win64選win32即可.

然后關(guān)鍵的來(lái)了. 把你下載的瀏覽器驅(qū)動(dòng)放在python解釋器所在的文件夾

Windwos: py -0p 查看Python路徑

Mac: open + 路徑

例如:open /usr/local/bin/

python爬蟲(chóng)之selenium知識(shí)點(diǎn)記錄,案例,selenium框架,python,python,爬蟲(chóng),selenium

前期準(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)題.

python爬蟲(chóng)之selenium知識(shí)點(diǎn)記錄,案例,selenium框架,python,python,爬蟲(chóng),selenium

二、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é)

  1. selenium的導(dǎo)包:from selenium import webdriver

  2. selenium創(chuàng)建driver對(duì)象:webdriver.Chrome()

  3. selenium請(qǐng)求數(shù)據(jù):driver.get("http://www.baidu.com/")

  4. selenium查看數(shù)據(jù): driver.page_source

  5. 關(guān)閉瀏覽器: driver.quit()

  6. 根據(jù)id定位元素: driver.find_element_by_id("kw")/driver.find_element(By.ID, "kw")

  7. 操作點(diǎn)擊事件: click()

  8. 給輸入框賦值:send_keys()

三、元素定位的方法

學(xué)習(xí)目標(biāo)

  1. 掌握 selenium定位元素的方法

  2. 掌握 selenium從元素中獲取文本和屬性的方法

通過(guò)selenium的基本使用可以簡(jiǎn)單定位元素和獲取對(duì)應(yīng)的數(shù)據(jù),接下來(lái)我們?cè)賮?lái)學(xué)習(xí)下 定位元素的其他方法

1、selenium的定位操作

  1. 元素定位的兩種寫(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)
  2. 元素定位的兩種方式:

    • 精確定位一個(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)
  3. 元素定位的八種方法:

    以下方法在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_elementfind_elements的區(qū)別

  • by_link_textby_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ū)別

  1. 只查找一個(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è)空列表

  2. 查找多個(gè)元素的時(shí)候:只能用find_elements(),返回一個(gè)列表,列表里的元素全是WebElement節(jié)點(diǎn)對(duì)象

  3. 找到都是節(jié)點(diǎn)(標(biāo)簽)

  4. 如果想要獲取相關(guān)內(nèi)容(只對(duì)find_element()有效,列表對(duì)象沒(méi)有這個(gè)屬性) 使用 .text

  5. 如果想要獲取相關(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ù)的方法

  1. 從定位到的元素中獲取數(shù)據(jù)

el.get_attribute(key) ? ? ? ? ? # 獲取key屬性名對(duì)應(yīng)的屬性值
el.text ? ? ? ? ? ? ? ? ? ? ?   # 獲取開(kāi)閉標(biāo)簽之間的文本內(nèi)容
  1. 對(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é)

  1. 根據(jù)xpath定位元素:driver.find_elements(By.XPATH,"http://*[@id='s']/h1/a")

  2. 根據(jù)class定位元素:driver.find_elements(By.CLASS_NAME, "box")

  3. 根據(jù)link_text定位元素:driver.find_elements(By.LINK_TEXT, "下載豆瓣 App")

  4. 根據(jù)tag_name定位元素:driver.find_elements(By.TAG_NAME, "h1")

  5. 獲取元素文本內(nèi)容:element.text

  6. 獲取元素標(biāo)簽屬性: element.get_attribute("href")

  7. 向輸入框輸入數(shù)據(jù): element.send_keys(data)

四、selenium的其他操作

學(xué)習(xí)目標(biāo)

  1. 掌握 selenium處理cookie等方法

  2. 掌握 selenium中switch的使用

  3. 掌握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é)

  1. 獲取cookie: get_cookies()

  2. 刪除cookie: delete_all_cookies()

  3. 切換窗口:switch_to.window()

  4. 切換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)行操作

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)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 項(xiàng)目知識(shí)點(diǎn)記錄

    項(xiàng)目知識(shí)點(diǎn)記錄

    Java程序使用 JDBC 接口訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的時(shí)候,需要以下幾步: 創(chuàng)建全局 DataSource 實(shí)例,表示數(shù)據(jù)庫(kù)連接池; 在需要讀寫(xiě)數(shù)據(jù)庫(kù)的方法內(nèi)部,按如下步驟訪問(wèn)數(shù)據(jù)庫(kù): 從全局 DataSource 實(shí)例獲取 Connection 實(shí)例; 通過(guò) Connection 實(shí)例創(chuàng)建 PreparedStatement 實(shí)例; 執(zhí)行 SQL 語(yǔ)句,如果是

    2024年02月13日
    瀏覽(21)
  • C#基礎(chǔ)知識(shí)點(diǎn)記錄

    C#基礎(chǔ)知識(shí)點(diǎn)記錄

    視頻 calculator.repoort() 加括號(hào)表示調(diào)用方法 calculator.repoort 表示方法名 c# 了解 1.net 運(yùn)行平臺(tái)上,運(yùn)行vb,c#,c++語(yǔ)言(.net環(huán)境為vb,c#,c++封裝了各種工具包) .net core跨平臺(tái)開(kāi)發(fā)(可運(yùn)行win linux) 相當(dāng)于java開(kāi)發(fā)工具包jdk上,包含java運(yùn)行環(huán)境(jre,jvm+java系統(tǒng)類庫(kù))和java工具 2.c#工具

    2024年02月11日
    瀏覽(105)
  • WPF復(fù)習(xí)知識(shí)點(diǎn)記錄

    由于近幾年主要在做Web項(xiàng)目,客戶端的項(xiàng)目主要是以維護(hù)為主,感覺(jué)對(duì)于基礎(chǔ)知識(shí)的掌握沒(méi)有那么牢靠,趁著這個(gè)周末重新復(fù)習(xí)下WPF的相關(guān)知識(shí)。 文章內(nèi)容主要來(lái)自大佬劉鐵錳老師的經(jīng)典著作《深入淺出WPF》。 因?yàn)槭菑?fù)習(xí),所以知識(shí)內(nèi)容不會(huì)一一記錄,如有需要了解更多可

    2024年02月11日
    瀏覽(26)
  • 嵌入式音頻知識(shí)點(diǎn)記錄

    嵌入式音頻知識(shí)點(diǎn)記錄

    音頻存儲(chǔ) PCM PCM是英文“Pulse Code Modulation”的縮寫(xiě),中文意為“脈沖編碼調(diào)制”。它是一種數(shù)字信號(hào)處理技術(shù),用于將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),常用于音頻編碼和傳輸 音頻參數(shù) 采樣率 采樣率:是指每秒電信號(hào)采集數(shù)據(jù)的頻率,常見(jiàn)的音頻采樣率有8000HZ,16000HZ,44100HZ,48000HZ,96

    2024年04月09日
    瀏覽(23)
  • ARMV7架構(gòu)知識(shí)點(diǎn)記錄

    ARMV7架構(gòu)知識(shí)點(diǎn)記錄

    ? ARM會(huì)定期發(fā)布該架構(gòu)的新版本。它們會(huì)添加新功能或?qū)ΜF(xiàn)有行為進(jìn)行更改。此類更改幾乎總是向后兼容的,這意味著在舊版本的體系結(jié)構(gòu)上運(yùn)行的用戶代碼將繼續(xù)在新版本上正確運(yùn)行。當(dāng)然,為了利用新特性而編寫(xiě)的代碼無(wú)法在缺乏這些特性的舊處理器上運(yùn)行。在體系結(jié)構(gòu)

    2024年02月20日
    瀏覽(21)
  • JMeter問(wèn)題及知識(shí)點(diǎn)記錄(1)

    JMeter問(wèn)題及知識(shí)點(diǎn)記錄(1)

    1、常見(jiàn)http響應(yīng)碼及含義 2、問(wèn)題一 解決方法: 需要將對(duì)傳入?yún)?shù)進(jìn)行編碼。 那么問(wèn)題來(lái)了,到底什么時(shí)候需要勾選編碼? 查閱后發(fā)現(xiàn)jmeter請(qǐng)求參數(shù)有空格時(shí),需要勾選編碼,仔細(xì)查看設(shè)置的參數(shù)果然帶有空格,所以在設(shè)置路徑和參數(shù)時(shí)一樣要注意空格問(wèn)題。 3、問(wèn)題二 解

    2024年02月08日
    瀏覽(19)
  • 記錄C#知識(shí)點(diǎn)(二)21-40

    記錄C#知識(shí)點(diǎn)(二)21-40

    目錄 21.性能優(yōu)化 22.動(dòng)態(tài)dynamic使用 23.中文亂碼 24.啟動(dòng)項(xiàng)目之前,執(zhí)行文件 25.深拷貝-反射實(shí)現(xiàn) 26.丟棄運(yùn)算符 _ 27.winform程序使用管理員運(yùn)行 28.wpf程序使用管理員運(yùn)行 29.Windows7上運(yùn)行.net6程序報(bào)錯(cuò) 30.字符串轉(zhuǎn)化字節(jié)數(shù)組,字節(jié)數(shù)組換成字符串 31.共享內(nèi)存 32.Lazy用法? 33.性能優(yōu)化

    2024年02月16日
    瀏覽(17)
  • sql:SQL優(yōu)化知識(shí)點(diǎn)記錄(四)

    sql:SQL優(yōu)化知識(shí)點(diǎn)記錄(四)

    type下的ref是非唯一性索引掃描具體的一個(gè)值 ref屬性 例如:ti表先加載,const是常量? t1.other_column是個(gè)t1表常量 test.t1.ID:test庫(kù)t1表的ID字段? ? ? ? t1表引用了shared庫(kù)的t2表的col1字段,t1.col2=‘’ac‘’是一個(gè)常量? t2表沒(méi)有索引只有id主鍵,col1,col2沒(méi)有建立索引 ? ? ?rows越少

    2024年02月10日
    瀏覽(20)
  • sql:SQL優(yōu)化知識(shí)點(diǎn)記錄(三)

    sql:SQL優(yōu)化知識(shí)點(diǎn)記錄(三)

    簡(jiǎn)單的查詢類型是:simple ? 外層 primary,括號(hào)里subquery ?用到了臨時(shí)表:derived ? trpe反映的結(jié)果與我們sql是否優(yōu)化過(guò),是否是最佳狀態(tài)息息相關(guān) 最簡(jiǎn)單的查詢啥都沒(méi)有改type就是all:表明的的檢索是全表掃描 ? const:通過(guò)id查詢,有索引查詢很快? t1查詢完之后作為一張臨時(shí)表

    2024年02月10日
    瀏覽(21)
  • sql:SQL優(yōu)化知識(shí)點(diǎn)記錄(十二)

    sql:SQL優(yōu)化知識(shí)點(diǎn)記錄(十二)

    ? ?加讀鎖和寫(xiě)鎖 查看是否上鎖:In_use:變成了1? ? 讀寫(xiě)鎖對(duì)我們數(shù)據(jù)產(chǎn)生哪些影響: 讀鎖:是共享鎖,其他線程可以查看: 加了讀鎖:session1不能修改自己,也不可以讀其他表 但是session2窗口可以讀其他表? session2:此時(shí)對(duì)加鎖的表進(jìn)行更改操作,它會(huì)進(jìn)入阻塞狀態(tài)? ?

    2024年02月09日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包