首页 > 解决方案 > Web 抓取未通过 Selenium/BS4 获取完整的源代码数据

问题描述

在此处输入图像描述

如图所示,如何从我检查的源中抓取输入标签的值属性中的数据?

我尝试过使用 BeautifulSoup 和 Selenium,但它们都不适合我。

部分代码如下:

html=driver.page_source

output=driver.find_element_by_css_selector('#bookingForm > div:nth-child(1) > div.bookingType > div:nth-child(15) > div.col-md-9 > input').get_attribute("value")

print(output)

这将返回一个NoSuchElementException错误。

实际上,当我尝试这样做时print(html),似乎缺少很多源代码数据。我怀疑这可能是与 JS 相关的问题,但 Selenium - 大部分时间都在渲染 JS - 在这个网站上不适合我。知道为什么吗?

我也试过这些:

html=driver.page_source

soup=bs4.BeautifulSoup(html,'lxml')

test = soup.find("input",{"class":"inputDisable"})

print(test)

print(soup)

print(test)返回None,并print(soup)返回大多数输入标签完全丢失的源。

标签: pythonseleniumbeautifulsoup

解决方案


通过检查页面检查此元素是否存在于此站点上。如果它在那里,很多时候 selenium 太快了,页面有时无法完全加载。尝试 selenium 的WAIT功能。很多时候就是这样。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

browser = webdriver.Firefox()
browser.get("url")
delay = 3 # seconds
try:
    myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
    print "Page is ready!"
except TimeoutException:
    print "Loading took too much time!"

推荐阅读