Python,Selenium,BS4 - 导航到下一页

时间:2014-05-19 16:35:08

标签: python selenium web-scraping beautifulsoup html-parsing

我的部分HTML如下所示:

<div id="qryNav">
<form method="post" action="OffQryRedirector.jsp" id="form1" name="form1">
    <input type="hidden" name="NextPage" value="7" />
    <input type="submit" name="Action" id="oq-nav-begin" value="&lt;&lt;" />
    <input type="submit" name="Action" id="oq-nav-prv" value="&lt;" />
<span class="oq-nav-btwn">Page 1 of 4</span>
    <input type="submit" name="Action" id="oq-nav-nxt" value="&gt;" />
    <input type="submit" name="Action" id="oq-nav-end" value="&gt;&gt;" />  
</form>
<a href="OffQryForm.jsp" class="qryNav"><span>Start a New Search</span></a> 
<!--<a href="javascript:history.back()" class="qryNav"><span>Modify Your Search</span>    </a>--> 
</div>

我正在尝试识别页数,然后转到下一页。 我的代码如下所示 -

html = driver.page_source
soup = BeautifulSoup(html)
pages =  soup.find_all('span', {'class': 'oq-nav-btwn'})[0].text.encode('ascii',     'ignore').strip().upper()
loc_of = pages.find('OF')
num_pages = int(pages[loc_of+2:].strip())
>>> print num_pages
4
span = soup.find_all('span', {'class': 'oq-nav-btwn'})
elem2 = span[0].find_next_sibling() 
elem2.find_element_by_id("oq-nav-nxt")

发布这个我试图为4页中的每一页运行循环 - 1 .. 4.但是当我使用

elem2.find_element_by_id("oq-nav-nxt").click()

我得到标准的selenium.common.exceptions.StaleElementReferenceException:消息:u&#39;陈旧元素引用:元素未附加到页面文档\ n(会话信息:chrome = 34.0.1847.131)\ n(驱动程序信息:chromedriver = 2.9.248315,platform = Windows NT 6.1 x86_64)&#39;

元素可见。我不认为尝试..抓住......等等..是解决方案..(我可能在这里错了。)

我也尝试用以下代码做同样的事情 -

span = soup.find_all('span', {'class': 'oq-nav-btwn'})
elem2 = span[0].find_next_sibling()
>>> print elem2
<input id="oq-nav-nxt" name="Action" type="submit" value="&gt;">
<input id="oq-nav-end" name="Action" type="submit" value="&gt;&gt;">
</input></input>

但我无法导航上面的elem2值,然后点击&#34; oq-nav-nxt&#34;按钮。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您不需要在此处使用BeautifulSoupSeleniumlocating elements而言非常强大。{/ 3>

一种选择是继续找到下一页链接by id,直到找不到:

while True:
    try:
        next_button = driver.find_element_by_id('oq-nav-nxt')
    except NoSuchElementException:
        break
    next_button.click()