Python 硒是误食

Python 硒是误食,python,python-2.7,python-3.x,selenium,selenium-webdriver,Python,Python 2.7,Python 3.x,Selenium,Selenium Webdriver,我试图让Selenium单击一个按钮,Selenium必须滚动才能单击该按钮。但是当Selenium向下滚动时,按钮会在粘滞条后面,Selenium会点击粘滞条而不是按钮 我正在使用Firefox webdriver 我尝试了以下方法: DesiredCapabilities.FIREFOX["elementScrollBehavior"] = 1 self.driver = webdriver.Firefox() 当我将elementScrollBehavior设置为1时,它根本不会滚动 我

我试图让Selenium单击一个按钮,Selenium必须滚动才能单击该按钮。但是当Selenium向下滚动时,按钮会在粘滞条后面,Selenium会点击粘滞条而不是按钮

我正在使用Firefox webdriver

我尝试了以下方法:

DesiredCapabilities.FIREFOX["elementScrollBehavior"] = 1
self.driver = webdriver.Firefox()
当我将
elementScrollBehavior
设置为
1
时,它根本不会滚动

我怎样才能使Selenium正确向下滚动,使按钮不会落在粘滞条后面

-编辑-
DesiredCapabilities.FIREFOX[“elementScrollBehavior”]=1


现在可以工作了,但它仍然无法单击按钮。即使粘滞条现在也不会妨碍您。

您可以尝试使用javascript scroll to元素,然后使用偏移量再滚动一点 例如在c#中


您可以尝试使用javascript滚动到元素,然后用偏移量再滚动一点 例如在c#中


您可以实现如下内容:

driver = webdriver.Firefox()
driver.get("http://somewebpage.example")
time.sleep(5)

while True:
    try:
        # Edit this to how you're currently scrolling
        driver.execute_script("window.scrollBy(0, 150);")
        button = driver.find_element(By.XPATH, YOUR_BUTTON_XPATH)
        button.click()
        break
    except WebDriverException:
        driver.execute_script("window.scrollBy(0, -100);")
        time.sleep(2)
如果您的脚本滚动到far并引发异常,它将捕获此错误并向上滚动页面100像素


这应该可以保证你的按钮被点击,它会不断向下移动50px直到找到它,但是你可以实现你的正常滚动方式,然后捕捉
WebDriverException
并向上滚动几个像素。

你可以实现这样的功能:

driver = webdriver.Firefox()
driver.get("http://somewebpage.example")
time.sleep(5)

while True:
    try:
        # Edit this to how you're currently scrolling
        driver.execute_script("window.scrollBy(0, 150);")
        button = driver.find_element(By.XPATH, YOUR_BUTTON_XPATH)
        button.click()
        break
    except WebDriverException:
        driver.execute_script("window.scrollBy(0, -100);")
        time.sleep(2)
如果您的脚本滚动到far并引发异常,它将捕获此错误并向上滚动页面100像素


这可以保证你的按钮被点击,它会不断向下移动50px直到找到它,但是你可以实现你的正常滚动方式,然后捕获
WebDriverException
并向上滚动几个像素。

也许有人可以将其转换为python可能有人现在可以将其转换为python了:我有这样的selenium脚本除了
time.sleep()
之外,还有另一种基于硒的替代方法吗?我尝试使用隐式等待,但似乎不起作用。是的,您可以使用以下方法等待元素出现在页面上。。例如,加载页面后,要等待用户名字段显示在屏幕上,它将至少等待10秒,除非用户名元素出现,然后它将继续:username\u element=WebDriverWait(driver,10)。直到(lambda d:d.find\u element\u by\u id('username'),这里的问题是它在滚动时会立即单击,由于我得到的
元素在点(327.5,15)处不可点击。其他元素将收到单击
。所以它无法点击,因为滚动不够快。它试图在滚动时点击按钮。我不明白。您尝试单击的元素在哪里?如果你滚动太远,屏幕上有其他东西覆盖它,异常块应该稍微向上滚动,足以使其可见(哪个地址:如何使Selenium正确向下滚动,使按钮不在粘滞条后面?)一个简单的时间。睡眠应该使脚本在单击之前等待(这就是我所使用的),尽管WebDriverWait可能是一个更好的解决方案,如果你能根据你的脚本进行定制的话。现在:我有这样的解决方案selenium脚本太快了除了
time.sleep()还有其他基于selenium的替代方案吗
我尝试使用隐式等待,但似乎不起作用。是的,您可以执行以下操作以等待元素出现在页面上。例如,加载页面后,要等待用户名字段显示在屏幕上,它将至少等待10秒钟,除非用户名元素出现,然后它将继续:username\u element=WebDriverWait(driver,10).until(lambda d:d.find_element_by_id('username'))这里的问题是,它在滚动时会立即单击,因为在点(327.5,15)处无法单击我得到的
元素。其他元素将收到“单击”
。因此它无法单击,因为滚动速度不够快。它在滚动时尝试单击按钮。我不明白。您尝试单击的元素在哪里?如果您滚动太远,并且屏幕上有其他内容覆盖它,则异常块应回滚稍微向上一点,足以使其可见(哪个地址:我如何才能使Selenium正确向下滚动,使按钮不在粘滞条后面?)一个简单的时间。睡眠应该使脚本在单击之前等待(这是我使用的),尽管WebDriverWait可能是一个更好的解决方案,如果您可以根据脚本定制它的话。