PhantomJS无法通过JavaScript控制的链接点击获取下一页

0 投票
1 回答
797 浏览
提问于 2025-04-18 13:08

我正在使用 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,导致我的循环一直持续下去:

    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

这看起来有点可疑:

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

我猜在phantomjs中它总是返回真,而在Firefox中它返回假。

我会把它改成更稳定的东西,比如:

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

撰写回答