一尘不染

selenium可与Chrome一起使用,但不能与无头Chrome一起使用

selenium

我已经使用Selenium和最初的PhantomJS开发了一些Python脚本。在走向自动下载时,我改用了(带头的)Firefox(运行了),然后选择了无头选项的Chrome,这样我就不会打开浏览器了。

我的第一个脚本访问一个页面和几个HTML元素,与无头Chrome完美搭配。

但是第二个 仅适用于带头的Chrome
。如果添加“无头”选项,它将不再起作用。当我尝试以无头模式打印HTML以查看为什么找不到所需的HTML元素时,我所拥有的只是:

<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>

使用Chrome浏览器,我可以打印完整的HTML。这就是我启动无头Chrome的方式:

options = webdriver.ChromeOptions()
options.add_argument("--ignore-certificate-errors") 
options.add_argument("headless") 
driver = webdriver.Chrome(chrome_options=options)

再次注意,这在我的另一个脚本中有效。唯一的区别是我需要登录才能访问该页面,但是即使那样,为什么它也可以与头部配合使用?通过填写表格,我的脚本可以自动登录。

Python:3.6.1,Chrome:60.0.3112.78(64位),Selenium:3.4.3

任何想法?谢谢。

编辑:这是代码的开头

url = 'https://10.11.227.21/tmui/'
driver.get(url + "login.jsp")

html_source = driver.page_source
print(html_source)

blocStatus = WebDriverWait(driver, TIMEOUT).until(EC.presence_of_element_located((By.ID, "username")))
inputElement = driver.find_element_by_id("username")
inputElement.send_keys('actualLogin')
inputElement = driver.find_element_by_id("passwd")
inputElement.send_keys('actualPassword')
inputElement.submit()

阅读 397

收藏
2020-06-26

共1个答案

一尘不染

我有和您一样的经历,并通过使用xvfb和pyvirtualdisplay解决了这一问题。

我使用chromedrive = v2.3.1,chrome-browser = v60和Selenium = 3.4.3

在无头Chrome中,某些脚本似乎无法按预期工作。

请参阅https://gist.github.com/addyosmani/5336747中的
vpassapera评论。

像下面这样尝试,

from pyvirtualdisplay import Display

display = Display(visible=0, size=(800, 600))
display.start()

# Do Not use headless chrome option
# options.add_argument('headless')

url = 'https://10.11.227.21/tmui/'
driver.get(url + "login.jsp")

html_source = driver.page_source
print(html_source)

blocStatus = WebDriverWait(driver,    TIMEOUT).until(EC.presence_of_element_located((By.ID, "username")))
inputElement = driver.find_element_by_id("username")
inputElement.send_keys('actualLogin')
inputElement = driver.find_element_by_id("passwd")
inputElement.send_keys('actualPassword')
inputElement.submit()

display.stop()

xvfb必须使用“ pyvortualdisplay”

$ sudo apt-get install -y xvfb
2020-06-26