python - 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)
返回大多数输入标签完全丢失的源。
解决方案
通过检查页面检查此元素是否存在于此站点上。如果它在那里,很多时候 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!"
推荐阅读
- android - Android Studio:需要 407 代理身份验证
- python - 使用 python 进行安静的分页
- c# - 使用 Mailkit 或 mimekit 向多个收件人发送一封电子邮件
- java - 如何使用 Java 将 JSON 字符串解析为 ArrayList?
- node.js - Expo Init 项目中的“错误:spawn cmd ENOENT”
- reactjs - TypeError:articles.map 不是使用 react redux 的函数
- java - 如何在没有循环的情况下从 ArrayList 获取对象?
- python - 无法使用 BeautifulSoup 从 HTML 中提取引用
- kotlin - 具有可为空值的枚举 compareTo 运算符重载
- android - 谷歌地图 api 应用程序一直在 android studio 中停止