Selenium execute_script window.scrollTo不滚动窗口

时间:2017-09-27 19:01:24

标签: python-3.x selenium scroll

我正在尝试点击BusinessWire网页底部的“下一步”按钮。我有一些代码从BusinessWire主页到我想要的搜索结果页面。我希望能够点击该页面的“下一步”按钮,但是我收到错误消息,告诉我“下一个”元素在点(X,Y)处不可点击。下一个按钮位于窗口底部。出于某种原因

browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")

命令不像我预期的那样滚动。因为窗口没有按预期滚动,所以单击元素是不可见的(至少我认为这是问题所在)。我在代码中使用了两次相同的命令,它在这两个实例中工作正常。任何有关使窗口滚动的帮助将不胜感激。这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

def BusinessWire():
    browser = webdriver.Chrome()
    browser.get('http://www.businesswire.com/portal/site/home/')
    search_box_element = browser.find_element_by_id('bw-search-
input')
    search_box_element.clear()
    search_box_element.send_keys('biotechnology')
    search_box_element.send_keys(Keys.ENTER)
    browser.execute_script("window.scrollTo(0, 
document.body.scrollHeight);")
    search_box_element_two = browser.find_element_by_id('more-news-
results')
    search_box_element_two.click()
    browser.execute_script("window.scrollTo(0, 
document.body.scrollHeight);")
    time.sleep(5)
    next_page_click_element = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="more-news-pagination"]/div/div[1]/div/a'))
    )
    next_page_click_element.click()

2 个答案:

答案 0 :(得分:0)

StackOverFlow不允许我发布更多评论?网址在代码中。但主页网址不是问题页面。问题页面是主页后面的搜索页面。搜索页面只能通过主页上的搜索来获取。我的代码完成了所有这些。

答案 1 :(得分:0)

尝试使用要滚动到的元素的scrollIntoView,抱歉这是在Java中,但在python中应该是一样的:

    driver.manage().window().maximize();
    driver.get("http://www.businesswire.com/portal/site/home/");
    wait = new WebDriverWait(driver, 10);
    driver.findElement(By.id("bw-search-input")).clear();
    driver.findElement(By.id("bw-search-input")).sendKeys("biotechnology");
    driver.findElement(By.id("bw-search-input")).sendKeys(Keys.ENTER);
    WebElement clicklink = driver.findElement(By.id("more-news-results"));
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", clicklink);
    clicklink.click();
    Thread.sleep(1000);
    WebElement clicknext = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"more-news-pagination\"]/div/div[1]/div/a")));
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", clicknext);
    clicknext.click();