簡體   English   中英

使用Selenium從Javascript網頁派生文本

[英]Deriving text from Javascript webpage using 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類來推導文本,但似乎我沒有以正確的方式解決這個問題。

elem是一個不是string的列表。 嘗試這個:

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

這打印出所有內容。 所以你可能需要一個更好的選擇器或解析其余的選擇器。

print (elem.text)

elem是一個WebElement對象,因此是打印的消息。 如果要訪問文本,則需要在末尾添加.text ,或者如果要獲取其他屬性,可以執行elem.get_attribute('innerHTML')

此外,由於div元素有很多其他文本,你將獲得比你想要的更多的文本。 我沒有看過其他類似的頁面,但也許你可以在div的html中提取</form><br><br>之間的內容。

那么,你要廢棄的內容實際上並不是動態的。 您可以使用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()

此代碼產生適當的結果!

如何從點擊

[英]How to click Onclick from <a without text Javascript form using Selenium?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM