Selenium没有更新网站(Python)

时间:2018-04-26 06:04:23

标签: python-3.x selenium web-scraping beautifulsoup

在我正在进行的项目中,我告诉Selenium去下一页抓取数据,该页面具有完全相同的URL。

我的代码:

driver = webdriver.Chrome()
driver.get("https://etherscan.io/token/0x168296bb09e24a88805cb9c33356536b980d3fc5#balances")

iframe1 = driver.find_element_by_id('tokeholdersiframe')
driver.switch_to.frame(iframe1)
soup = BeautifulSoup(driver.page_source, 'html.parser')
token_holders = soup.find_all('tr')

driver.find_element_by_link_text('Next').click()
time.sleep(10)
token_holders2 = soup.find_all('tr') #I get the data from previous page (exact same as token_holder) rather than the new data.

但是,Selenium没有更新,我仍然从上一页获得相同的数据。

我尝试在点击后使用隐式等待:

driver.implicitly_wait(30)

但它不起作用。我还尝试将汤重置为driver.page_source,并让驱动程序使用iframe重新引用driver.find_element_by_id("id"),但都不起作用。

2 个答案:

答案 0 :(得分:0)

从问题我假设selenium没有等待下一页加载。确保发生这种情况的一种方法(虽然不是最优雅的)是使用当前页面上已知的元素,您知道这些元素会发生变化并等待点击后发生更改。您可以使用隐式等待,请参阅https://selenium-python.readthedocs.io/waits.html,了解有关如何执行此操作的详细信息。

或者,您可以在单击后添加显式等待。即

 from time import sleep
 ...

 driver.click(..);
 sleep(0.5) # Wait for half a second

 # Scrape the page

答案 1 :(得分:0)

创建soup后,它不会动态更新以反映driver.page_source。您需要创建BeautifulSoup的新实例并传递更新的页面源。

token_holders = soup.find_all('tr')

driver.find_element_by_link_text('Next').click()
soup = BeautifulSoup(driver.page_source, 'html.parser')
token_holders2 = soup.find_all('tr')
>>> token_holders[1:]
[<tr><td>1</td><td><span><a href="/token/0x168296bb09e24a88805cb9c33356536b980d3fc5?a=0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d" target="_parent">0xd35a2d8c651f3eba4f0a044db961b5b0ccf68a2d</a></span></td><td>310847219.011683</td><td>31.0847%</td></tr>,
 <tr><td>2</td><td><span><a href="/token/0x168296bb09e24a88805cb9c33356536b980d3fc5?a=0xe17c20292b2f1b0ff887dc32a73c259fae25f03b" target="_parent">0xe17c20292b2f1b0ff887dc32a73c259fae25f03b</a></span></td><td>200000001</td><td>20.0000%</td></tr>,
...
]

>>> token_holders2[1:]
[<tr><td>51</td><td><span><a href="/token/0x168296bb09e24a88805cb9c33356536b980d3fc5?a=0x5473621d6d5f68561c4d3c6a8e23f705c8db7661" target="_parent">0x5473621d6d5f68561c4d3c6a8e23f705c8db7661</a></span></td><td>687442.69121294</td><td>0.0687%</td></tr>,
 <tr><td>52</td><td><span><a href="/token/0x168296bb09e24a88805cb9c33356536b980d3fc5?a=0xbc14ca2a57ea383a94281cc158f34870be345eb6" target="_parent">0xbc14ca2a57ea383a94281cc158f34870be345eb6</a></span></td><td>619772.39698</td><td>0.0620%</td></tr>,
 ...
]