Selenium Chrome Headless立即失效



当我设置"选项。headless = True",这将失败,因为EC条件从未满足,就好像没有实际单击菜单并且页面标题没有更改一样。当不处于无头模式时,这绝对工作得很好,EC条件很好地满足了,这意味着顶层菜单选择工作得很好,并将我带到正确的页面.....

这是我在无头模式的第一次尝试,但我假设它只是建立一个虚拟dom,所以通过菜单的导航应该带我到同一页面,与非无头相同的标题?

class OrganizationsAutomate():
def __init__(self, driver:ERVAutomate):
self.driver=driver
def task_navigate_to_organizations(self):
print("Navigating to Organizations...")
print("Clicking Products menu...")
self.driver.ui.click_nav_menu(selector_type="CSS", selector_text="a.vv-navbar-link",
menu_name="Products", time_to_sleep=2)
print("Clicking Organizations menu...")
self.driver.ui.click_nav_menu(selector_type="CSS", selector_text="a.vv-navbar-link",
menu_name="Organizations", time_to_sleep=2)

try:
element = WebDriverWait(self.driver, 30).until(
EC.title_contains("Organizations")
)
except Exception as e:
print("Do not appear to be on the Organizations page....", e)
raise e
print("Navigated to Organizations....")

更新:我有更多的运气,没有最大化窗口在无头模式,只是设置一个窗口的大小。

def __init__(self, driver_path, url, user_name, user_password, implicit_wait=5, teardown=False):
self.__driver_path = driver_path
self.__url = url
self.__user_name = user_name
self.__user_password = user_password
self.__implicit_wait = implicit_wait
self.__teardown = teardown
self.__ui = UIInteract(self)
# add the chrome drive to the path
os.environ['PATH'] += self.__driver_path
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
options.headless = True
options.add_argument("--disable-extensions")
options.add_argument("--disable-infobars")
options.add_argument("--window-size=1920,1080");
# initalise webdriver super class
super(ERVAutomate, self).__init__(options=options)
# implicit wait time for finding an element in selenium
self.implicitly_wait(self.__implicit_wait)

在headless模式下,您可以添加以下参数以使其更稳定。

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("--start-maximized")
options.add_argument("--disable-extensions")
options.add_argument("--disable-infobars")
options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(executable_path = driver_path, options = options)

driver = webdriver.Chrome(options = options)

也尝试设置一些睡眠或延迟,使用显式等待是Selenium的一种方式。

请点击此处了解更多详情。

您可以尝试此参数以及无头模式。

options.add_argument('--no-sandbox')

最新更新