PhantomJS没有在JavaScript控制的链接中单击下一页

时间:2014-07-13 14:37:31

标签: python selenium selenium-webdriver phantomjs

我使用PhantomJSSelenium WebDriver迭代一组页面,其中有一个按钮,用于封装链接,您可以点击该链接转到下一页,如下所示:

<a href="javascript:GetNextPage(1, 12949)" class="next lnkPagination" rel="nofollow">&nbsp;</a>

javascript:GetNextPage的第一个参数根据我的应用程序所在的当前页面动态变化。我尝试使用Firefox Selenium的WebDriver来模拟这种行为并且它有效,但是当我使用PhantomJS Webdriver进行模拟时,我无法迭代,因为我的应用程序永远停留在第一页。

以下是我正在进行此迭代的应用程序代码的确切位置。我希望每次迭代都会更改current_page_index,但它并没有在1中停止,并且我的while循环会持续下去:

    driver = webdriver.PhantomJS()
    driver.get(response.url)

    while True:
        next_page_link = driver\
                         .find_element_by_xpath("//a[@class='next lnkPagination']")\
                         .get_attribute("href")

        node = re.search("GetNextPage\((\d+),\%20(\d+)\)", next_page_link)
        current_page_index = int(node.group(1))
        last_page_index = int(node.group(2))
        .
        .
        . 
        if current_page_index == last_page_index:
            break

        # Just click to next page if the next page element has rendered on the page
        while True:
            time.sleep(1)
            if driver.execute_script("return jQuery.active == 0"):
                break

        driver.get(next_page_link)


    driver.quit()

是否有任何理由可以在Firefox WebDriver中使用,但在PhantomJS WebDriver中没有?

我很感激一些帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

这看起来很可疑:

    if driver.execute_script("return jQuery.active == 0"):

我的猜测是它总是在phantomjs中评估为true,而在Firefox中评估为false。

我会将其更改为更稳定的内容,例如:

    String readyState = driver.execute_script("return document.readyState");
    if (readyState != "complete"):