Chrome Headless模式(二)——Python+selenium+headerless


selenium調用headerless

1. 基礎環境:

    我使用的環境:

python:3.5.4

python的selenium庫: 3.141.0

chrome瀏覽器:  71.0.3578.98

chromedriver下載地址: http://chromedriver.storage.googleapis.com/index.html

注意:一定要確保chrome瀏覽器和chromedriver版本對應,如果不對應,可能會出現各種奇怪的報錯

2. selenium使用headless模式

如何通過selenium調用headless模式呢?  下面是python的代碼

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
#無頭模式
chrome_options.add_argument('--headless')
#實例化Chrome driver
driver=webdriver.Chrome(chrome_options=chrome_options)
#打開百度地圖
driver.get("https://map.baidu.com/")
#截屏,文件保存為baidu-map.png
driver.save_screenshot("baidu-map.png")

3. 瀏覽器設置窗口大小

chrome_options.add_argument('--window-size=1280,800')

4. 打開新的標簽頁

      js代碼可window.open(url)可在新窗口打開一個網頁, dirver可執行js代碼,具體代碼如下:

js="window.open('http://www.baidu.com/')"
driver.execute_script(js)

5. 切換窗口

比如我們打開的第一個頁面是[百度地圖], 第2個窗口打開的頁面是百度.如果我們想在第2個頁面的輸入框輸入selenium,代碼如下

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
#無頭模式
chrome_options.add_argument('--headless')
#設置窗口大小
chrome_options.add_argument('--window-size=1280,800')
#實例化Chrome driver
driver=webdriver.Chrome(chrome_options=chrome_options)
#打開百度地圖頁面
driver.get("https://map.baidu.com/")

js="window.open('http://www.baidu.com')"
driver.execute_script(js)
driver.find_element_by_id("kw").send_keys("selenium")
driver.save_screenshot("baidu-map5.png")
driver.quit()

      但是很奇怪, 代碼報錯了,no such element: Unable to locate element: {"method":"id","selector":"kw"} 找不到這個元素.但是我們看百度的頁面命名可以找到這個元素啊. 我們在這步操作之前截一張圖就可以看出來,頁面扔在第一個頁面,即百度地圖的頁面, 這時候我們需要切換一些窗口.

注意: 以前的方法,diver.switch_to_window() 已經被driver.switch_to.window替代

search_windows=driver.current_window_handle
all_handles=driver.window_handles
for handle in all_handles:
    if handle !=search_windows:
        driver.switch_to.window(handle)

6. 關閉窗口和關閉瀏覽器

  • driver.quit() 關閉瀏覽器
  • driver.close() 關閉標簽頁.

 這2個的使用場景是不同的:

1) 在我們的case執行完對瀏覽器的操作后,一定要加上driver.quit() ,不然會導致內存爆滿;

2) 如果我們只想關閉一個窗口, 則用driver.close() 

 

7. 添加代理

 

chrome_options.add_argument("--proxy-server=http://" + ip:port)

 

8. 修改User-Agent

 

# 修改User-Agent
chrome_options.add_argument('user-agent= '你想修改成的User-Agent')

 

9. 禁用圖片

 

chrome_options.add_argument('blink-settings=imagesEnabled=false')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM