我正在尝试使用selenium和geckodriver从网站上抓取javascript内容,但是我正在获取任何数据。以下是javascript代码
<div _ngcontent-c2="" class="header-wrapper">
<div _ngcontent-c2="" class="title">Suda Office</div>
<div _ngcontent-c2="" class="update">Jul 05 11:07 AM</div>
</div>
<div _ngcontent-c2="">
<div _ngcontent-c2="" class="item-row title-headers">
<div _ngcontent-c2="" class="item-col head1">Route</div>
<div _ngcontent-c2="" class="item-col head2">Destination</div>
<div _ngcontent-c2="" class="item-col">
<div _ngcontent-c2="" class="head3 head3-height">ETA</div>
</div>
</div>
<div _ngcontent-c2="">
<div _ngcontent-c2="" class="alternet-color">
<div _ngcontent-c2="" class="item-row item-eta-row">
<div _ngcontent-c2="" class="item-col eta-route">15 T</div>
<div _ngcontent-c2="" class="item-col eta-destination">
<marquee _ngcontent-c2=""> Charbagh</marquee></div>
<div _ngcontent-c2="" class="item-col eta-col">
<div _ngcontent-c2="" class="eta-display-wrapper">
<div _ngcontent-c2="" class="display">
<span _ngcontent-c2="" class="space"></span>
<span _ngcontent-c2="" class="currentTiming">10 min</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
我必须从上述javascript内容中获取class="item-col eta-route"
,class="item-col eta-destination"
和class="currentTiming"
数据。我使用以下代码,但在输出中不显示任何内容
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(url)
a = driver.find_elements_by_class_name("item-col eta-route")
但是输出a=[]
。甚至d = driver.find_elements_by_class_name("currentTiming")
都给出以下输出
[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="6b1f2344-8e8a-4f48-a29a-54610179d62f", element="38e7ce58-ea66-4461-bee7-f81ac414595b")>]
如何使用硒从页面中获得正确的输出?
答案 0 :(得分:0)
问题可能出在item-col eta-route
类名上。 HTML中可能有数百个类似的类。
您可以改用 css选择器:
div[_ngcontent-c2][class='item-col eta-route']
获取 15 T 值。
引入webdriver wait将是确保脚本稳定的好主意。
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[_ngcontent-c2][class='item-col eta-route']")))
print(element.text)
用于提取值:
marquee_text = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[_ngcontent-c2][class='item-col eta-destination'] marquee")))
print(marquee_text.text)
您需要导入以下内容:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC