【发布时间】:2020-07-05 18:41:09
【问题描述】:
我使用 Selenium 编写了一个脚本,它可以在浏览器模式下运行。但是,当我在 Headless 模式下尝试时,它不再起作用。我添加了参数以将窗口大小更改为我的屏幕分辨率;但是,这仍然没有解决问题。奇怪的是一些按钮可以工作,而其他按钮则不能。不太清楚怎么回事。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
user_input='xyz'
def get_sequence():
options = Options()
options.add_argument("--window-size=1920,1080");
options.add_argument("--start-maximized");
options.add_argument("--headless");
driver = webdriver.Chrome(options=options)
driver.get('https://clims4.genewiz.com/RegisterAccount/Login')
fill_box = driver.find_element_by_xpath('//*[@id="LoginName"]')
fill_box.clear()
fill_box.send_keys('*****')
fill_box = driver.find_element_by_xpath('//*[@id="Password"]')
fill_box.send_keys('*****')
driver.find_element_by_xpath('//*[@id="btnSubmit"]').click()
table = driver.find_element_by_xpath('//*[@id="myOrdersTable"]/tbody')
for i,td in enumerate(table.find_elements_by_xpath('//*[@id="myOrdersTable"]/tbody/tr/td[4]'),1):
if td.text == user_input:
driver.find_element_by_xpath(f'//*[@id="myOrdersTable"]/tbody/tr[{i}]/td[11]/button').click()
break
time.sleep(5)
seq_list=[]
table=driver.find_element_by_xpath('//*[@id="gwzSngrOrderResultPanelRoot"]/table/tbody')
for x,sequence in enumerate(table.find_elements_by_xpath('//*[@id="gwzSngrOrderResultPanelRoot"]/table/tbody/tr/td[9]'),1):
driver.find_element_by_xpath(f'//*[@id="gwzSngrOrderResultPanelRoot"]/table/tbody/tr[{x}]/td[9]/span[2]').click()
time.sleep(5)
seq_info=driver.find_element_by_xpath('//*[@id="gwzViewResultsModalDialog"]/div/div/div[2]/div')
seq_list.append([seq_info.text])
driver.find_element_by_xpath('//*[@id="gwzViewResultsModalDialog"]/div/div/div[3]/button').click()
time.sleep(5)
get_sequence():
如果您删除无头选项/参数,上述方法有效。这是目前上面的输出。
[0705/143642.917:INFO:CONSOLE(66)] "visitorResponseData set", source: https://eastprodcdn.azureedge.net/bundles/legacy/velaro.inline.9b226ddb.js (66)
[0705/143644.640:INFO:CONSOLE(3)] "Hotjar not launching due to suspicious userAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/83.0.4103.116 Safari/537.36", source: https://static.hotjar.com/c/hotjar-1144113.js?sv=6 (3)
[0705/143645.765:INFO:CONSOLE(66)] "visitorResponseData set", source: https://eastprodcdn.azureedge.net/bundles/legacy/velaro.inline.9b226ddb.js (66)
driver.find_element_by_xpath(f'//*[@id="myOrdersTable"]/tbody/tr[{i}]/td[11]/button').click()
File "C:\Users\Sams PC\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Users\Sams PC\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Users\Sams PC\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\Sams PC\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <button type="button" class="btn btn-sm gwz-grid-action" data-orderid="155e7035-5540-4fc5-8045-247511d0f7dc">...</button> is not clickable at point (1793, 959). Other element would receive the click: <div id="hs-eu-cookie-confirmation" class="hs-cookie-notification-position-bottom" data-nosnippet="">...</div>
(Session info: headless chrome=83.0.4103.116)
只是为了增加可读性,这个脚本只是去一个站点,在站点内的一个表中搜索 user_input,然后单击一个按钮。然后,新页面包含另一个表,单击按钮会生成一个弹出窗口,其中包含您要提取的数据。
编辑: 这些是我尝试过的解决方案:
options = Options()
options.add_argument("--window-size=1920,1080")
options.add_argument("--start-maximized")
options.add_argument("--disable-gpu")
options.add_argument('--disable-extensions')
options.add_argument('--no-sandbox')
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
另外,浏览器模式下的浏览器窗口大小为 1554,882(当它工作时),所以我什至补充道:
driver.set_window_size(1554,842)
它仍然没有工作。这不是浏览器大小的问题。
【问题讨论】:
-
根据错误日志。 Cookies 消息正在拦截点击。在与页面上的任何元素交互之前,接受“此网站在您的计算机上存储 cookie....'id="hs-eu-cookie-confirmation-inner"'
-
抱歉,忘记删除/回答这个问题了。是的,弹出了一个 cookie 警告,但它不会在浏览器模式下弹出,因为该网站记得我之前已经接受了警告。
标签: python selenium google-chrome selenium-webdriver