Python 处理许多看不见的因素
我正在写一个脚本,自动为我赌博(我知道,这是一个项目,我不期望赚钱,这是反对t&C的),我决定使用它。我遇到了很多Python 处理许多看不见的因素,python,selenium,Python,Selenium,我正在写一个脚本,自动为我赌博(我知道,这是一个项目,我不期望赚钱,这是反对t&C的),我决定使用它。我遇到了很多ElementNotVisibleException:Message:element not visible错误。我在尝试登录时遇到的第一个问题,因为它不允许我在密码字段中输入密码。我通过发送JavaScript命令解决了这个问题: driver.find_element_by_css_selector("div.hm-Login_UserNameWrapper > input
ElementNotVisibleException:Message:element not visible
错误。我在尝试登录时遇到的第一个问题,因为它不允许我在密码字段中输入密码。我通过发送JavaScript命令解决了这个问题:
driver.find_element_by_css_selector("div.hm-Login_UserNameWrapper > input.hm-Login_InputField").send_keys(config.BET365_USERNAME)
driver.execute_script("document.getElementsByClassName('hm-Login_InputField Hidden')[0]"
".setAttribute('value', '" + config.BET365_PASSWORD + "')")
driver.find_element_by_css_selector("body > div:nth-child(1) > div > div:nth-child(1) > div > "
"div.hm-HeaderModule_Primary > div.hm-HeaderModule_UserAdmin > div > "
"div.hm-Login_PasswordWrapper > button").send_keys(Keys.ENTER)
一旦我这样做了,我会尝试通过以下方式找到1.33的报价:
low_odd = driver.find_elements_by_xpath("//*[contains(text(), '1.33')]")[0]
这确实给我找到了一个元素。当我尝试执行low\u-odd.click()
时,它会给我一个ElementNotVisibleException
错误
有没有办法获取这个
low\u odd
元素的路径,这样我就可以发送另一个JavaScipt命令在我的betslip上选择它?或者任何其他聪明的方法来克服这些错误?Selenium将定位不可见但不会对其执行操作的元素(单击等。抛出错误)。设计是,Selenium只对用户可以执行的元素执行操作,例如,用户不能单击不可见的元素
您可以将元素集合向下筛选为仅显示(可见)的元素
一旦你有了过滤列表,循环浏览并点击每一个,或者只点击第一个,或者你想要的任何东西
注意:上面的代码未经测试,我不是python爱好者,因此它可能不完全正确或不是非常python-y。你可能需要稍微调整一下
对于筛选参考:Selenium将定位不可见但不会对其执行操作的元素(单击等。抛出错误)。设计是,Selenium只对用户可以执行的元素执行操作,例如,用户不能单击不可见的元素 您可以将元素集合向下筛选为仅显示(可见)的元素 一旦你有了过滤列表,循环浏览并点击每一个,或者只点击第一个,或者你想要的任何东西 注意:上面的代码未经测试,我不是python爱好者,因此它可能不完全正确或不是非常python-y。你可能需要稍微调整一下
对于筛选引用:,因为它报告元素不可见,未找到元素。表示元素存在于DOM树中。但不等同于元素已通过浏览器完成渲染(您可以在第页中看到该元素)。所以我们应该记住:编码时等待页面加载,就像在手动单击/输入某些内容之前等待页面打开一样。另外,selenium在页面上完成每个操作的速度比您想象的要快,一般为100-300毫秒。尝试在页面打开/重定向后添加显式等待。因为它报告元素不可见,未找到元素。表示元素存在于DOM树中。但不等同于元素已通过浏览器完成渲染(您可以在第页中看到该元素)。所以我们应该记住:编码时等待页面加载,就像在手动单击/输入某些内容之前等待页面打开一样。另外,selenium在页面上完成每个操作的速度比您想象的要快,一般为100-300毫秒。尝试在页面打开/重定向后添加显式等待。
low_odd = [e for e in driver.find_elements_by_xpath("//*[contains(., '1.33')]") if e.is_displayed()]