我正在使用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
有什么建议吗
为什么使用
正如你所说,这些都是明显的动态变化——它们会发生变化
为什么不使用Xpath
这些显然是通用的XPath,但您可以在任何登录页面上找到它们,并相应地进行更改
这样,无论测试用例是什么,您的逻辑都会起作用
相关问题 更多 >
编程相关推荐