使用Selenium从Javascript网页派生文本

时间:2017-09-14 22:23:15

标签: javascript python html selenium

我正试图从这个网站提取文本"这个由Delta Flow Projects Office"管理的电台:https://waterdata.usgs.gov/ca/nwis/uv?site_no=381504121404001。此行位于div类stationContainer下。由于这是一个动态网页,我使用selenium来获取html。

这是网站上的html。

img

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
url = "https://waterdata.usgs.gov/ca/nwis/uv?site_no=381504121404001"
browser.get(url) #navigate to the page
innerHTML = browser.execute_script("return document.body.innerHTML")
elem = browser.find_elements_by_xpath("//div[@class='stationContainer']")

print (elem)

我从打印消息中得到了这个结果:

  

selenium.webdriver.remote.webelement.WebElement(session =" 96fc124c0e2d1fd4cd86f61db272d52a",element =" 0.5862443940581294-1")

我希望通过搜索div类来推导文本,但似乎我没有以正确的方式解决这个问题。

3 个答案:

答案 0 :(得分:1)

elem是一个不是string的列表。试试这个:

elem = browser.find_elements_by_xpath("//div[@class='stationContainer']")[0]
print elem.text

打印出所有内容。所以你可能需要一个更好的选择器或一种解析其余部分的方法。

答案 1 :(得分:1)

print (elem.text)

elem是一个WebElement对象,因此是打印的消息。如果您想要访问该文字,则需要将.text添加到最后,或者如果您想获取其他属性,则可以执行elem.get_attribute('innerHTML')之类的操作。

此外,由于div元素有很多其他文本,因此您将获得比您想要的更多的文本。我没有查看其他类似的页面,但也许你可以在div的html中提取</form><br><br>之间的内容。

答案 2 :(得分:0)

嗯,您要废弃的内容实际上并不是动态的。您可以使用bs4来获取 a.b.c 内容。这有点具有挑战性的是,您搜索的元素不在某些标记之间。因此,解决这个问题的方法是轻松进行字符串操作,以便在div class stationContainer</form>标记之间提取内容,如下所示:

<br/><br/>

此代码生成相应的结果!