selenium webdriverwait不会在for循环| python中重置计时器

2024-09-28 19:03:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.8.5&;selenium3.141.0以自动化登录过程。我用css选择器来定位登录按钮,但在我的测试中,选择器可能会改变(我对此有点模糊-这与页面加载方式有关是动态的??)

我目前的解决方案是迭代我观察到的css选择器列表(它们确实重复):

driver = webdriver.Chrome(options=options)
success = True
errorMSG = ""

for loginClickID in paper.loginClickID:
        wait = WebDriverWait(driver, 12)
        try:
            wait.until(
            EC.presence_of_element_located(By.CSS_SELECTOR, loginClickID)
            ) 
        except Exception as e:  
            log("\nFailed to see click-to-login element: " + loginClickID + "\nHTML output shown below:\n\n" + driver.page_source)
            success = False
                errorMSG = e

if not success:
        response = driver.page_source
        driver.quit()
        return f"{paper.brand} login_fail\nLoginClickID: {loginClickID}\nNot found in:\n{response}\n{errorMSG}\n"

我正在为循环的每个迭代创建一个新的WebDriverWait()对象。但是,当我调试代码并手动跳过它时,第二次进入循环时wait.until()方法立即退出,甚至没有抛出异常(这很奇怪,对吧?)并完全退出循环(css选择器列表有2个元素)

我的想法是wait.until()计时器不知何故没有重置

我尝试过使用driver.refresh()重新加载页面,并在except:部分使用time.sleep(1)休眠python代码,希望这可能有助于其他事情-它没有

我已经包括了上下文的所有ChromeDriver选项:

options = Options()
    # options.add_argument("--headless")
    options.add_argument("window-size=1400,1500")
    options.add_argument("--disable-gpu")
    options.add_argument("--no-sandbox")
    options.add_argument("enable-automation")
    options.add_argument("--disable-infobars")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("start-maximized")
    options.add_argument("--disable-browser-side-navigation")

我正在使用: 谷歌Chrome 80.0.3987.106 &; ChromeDriver 80.0.3987.106

有什么建议吗


Tags: add列表driver选择器页面argumentcssoptions
1条回答
网友
1楼 · 发布于 2024-09-28 19:03:28

为什么使用

css selectors

正如你所说,这些都是明显的动态变化——它们会发生变化

为什么不使用Xpath

xpath_email = "//input[@type='email']"
xpath_password = "//input[@type='password']"

driver.find_element_by_xpath(xpath_email)
time.sleep(1)
driver.find_element_by_xpath(xapth_password)

这些显然是通用的XPath,但您可以在任何登录页面上找到它们,并相应地进行更改

这样,无论测试用例是什么,您的逻辑都会起作用

相关问题 更多 >