Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 处理许多看不见的因素_Python_Selenium - Fatal编程技术网

Python 处理许多看不见的因素

Python 处理许多看不见的因素,python,selenium,Python,Selenium,我正在写一个脚本,自动为我赌博(我知道,这是一个项目,我不期望赚钱,这是反对t&C的),我决定使用它。我遇到了很多ElementNotVisibleException:Message:element not visible错误。我在尝试登录时遇到的第一个问题,因为它不允许我在密码字段中输入密码。我通过发送JavaScript命令解决了这个问题: driver.find_element_by_css_selector("div.hm-Login_UserNameWrapper > input

我正在写一个脚本,自动为我赌博(我知道,这是一个项目,我不期望赚钱,这是反对t&C的),我决定使用它。我遇到了很多
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()]