使用浏览器的HEADLESS模式報錯ElementNotInteractableException
程序员文章站
2022-05-27 09:01:54
...
1.实践 Selenium + HEADLESS
使用浏览器的HEADLESS模式进行自动化测试,你需要先满足以下前提:
Python + Selenium 运行环境
Chrome 59+ 或者 Firefox 55+
ChromeDriver 或者 GeckoDriver 最新版已加入PATH,不加入PATH要提供絕對路徑
2.Chrome版实例
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu') # 允许在无GPU的环境下运行,可选
options.add_argument('--window-size=1920x1080') # 建议设置
browser = webdriver.Chrome(chrome_options=options)
browser.get('https://www.baidu.com')
browser.find_element_by_id('kw').send_keys('HELLO')
browser.find_element_by_id('su').click()
sleep(1) # 简单粗暴的等待,实际项目中勿用
assert browser.title == u'HELLO_百度搜索'
browser.save_screenshot('chrome-headless-test.png')
3.Firefox版实例
from time import sleep
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('--headless')
# options.add_argument('--window-size=1920x1080') # Firefox无效
browser = webdriver.Firefox(firefox_options=options)
browser.set_window_size(1280, 1024) # 启动后设置浏览器大小,但是高度会随着访问的网页变化
browser.get('https://www.baidu.com')
browser.find_element_by_id('kw').send_keys('HELLO')
browser.find_element_by_id('su').click()
sleep(1)
assert browser.title == u'HELLO_百度搜索'
browser.save_screenshot('firefox-headless-test.png')
4.注意:
在實際運用工作項目的時候,chrome版最好加上下列設置,否則會報ElementNotInteractableException
options.add_argument('--window-size=1920x1080')
當然,也可能是等待時間不夠導致,但是我用有界面方式運行的時候沒問題且保證了*面運行sleep(5)
也是抱這個錯誤。加上就沒問題了
5.另外:
如果chromedriver.exe的路徑沒有寫入PATH,要在參數中加上指定路徑:
driver = webdriver.Chrome(executable_path=(r'C:\Program Files\Google\Chrome\Application\chromedriver.exe'), chrome_options=chrome_options)
其他*面瀏覽器學習貼:
1.Python 爬虫杂记 - Chrome Headless
2.selenium+webDriver+headless Chrome实现python爬虫
3.使用浏览器的HEADLESS模式进行自动化测试
4.python-使用無頭瀏覽器時出現ElementNotInteractableException
5.Chrome Headless模式(一)