【问题标题】:Deriving text from Javascript webpage using Selenium使用 Selenium 从 Javascript 网页派生文本
【发布时间】:2018-02-24 00:37:50
【问题描述】:

我正在尝试从以下网站中提取文本“该站由 Delta Flow 项目办公室管理”:https://waterdata.usgs.gov/ca/nwis/uv?site_no=381504121404001。此行位于 div 类stationContainer 下。由于这是一个动态网页,我使用 selenium 来导出 html。

这是来自网站的 html。

这是我的代码:

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 类来派生文本,但似乎我的方法不正确。

【问题讨论】:

  • 您可以获取页面源代码,然后使用 bs4 或 lxml 之类的解析库
  • @whackamadoodle3000,当我得到页面源时,它没有识别这行文本,因为它是从 JS 呈现的
  • 使用 selenium 的获取页面源并等待,以便 javascript 可以呈现它

标签: javascript python html selenium


【解决方案1】:

嗯,您要废弃的内容实际上并不是动态的。您可以使用bs4 获取div class stationContainer 内容。使这有点挑战性的是,您正在搜索的元素不在某些标签之间。因此,解决此问题的方法是通过简单的字符串操作来提取 </form><br/><br/> 标记之间的内容,如下所示:

from bs4 import BeautifulSoup
from requests import get

soup = BeautifulSoup(get('https://your_url_here').text, "html.parser")

for i in soup.find_all('div', attrs={'class':"stationContainer"}):
    print str(i).split('</form>')[1].split('<br/><br/>')[0].strip()

此代码产生适当的结果!

【讨论】:

    【解决方案2】:

    print (elem.text)

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-07
        • 1970-01-01
        • 1970-01-01
        • 2011-12-18
        • 1970-01-01
        • 2011-02-08
        • 2018-04-03
        相关资源
        最近更新 更多