python - 无法使用 Selenium 从网页中找到文本
问题描述
我正在尝试抓取某个产品的亚马逊评论,但我无法使用 selenium 找到评级的文本。但同样的东西很容易用汤刮掉。
这是我使用汤的代码:
link='same link as mentioned above'
url=requests.get(link).content
bs=soup(url,'html.parser')
for i in bs.find_all('span',{'class':'a-icon-alt'}):
print(i.text.split(' ')[0])
##输出 4.3 5.0 1.0 5.0 2.0 4.0 1.0 5.0 5.0 5.0 5.0 5.0 5.0
这是我使用 Selenium 的代码:
import time
from selenium import webdriver
from bs4 import BeautifulSoup as soup
import requests
link='link to the above mentioned page'
driver=webdriver.Chrome()
driver.get(link)
for i in driver.find_elements_by_css_selector('.a-icon-alt'):
print(i.text)
我无法使用 Selenium 获得相同的结果,我得到的只是与该页面上存在的项目数量相等的空白。我也尝试过使用 XPath 和 class_name,但没有得到所需的响应。
解决方案
获得评论评分 诱导WebDriverWait
并等待presence_of_all_elements_located
() 并使用get_attribute("innerHTML")
而不是文本
代码:
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
link='https://www.amazon.in/BenQ-inch-Bezel-Monitor-Built/product-reviews/B073NTCT4R/ref=cm_cr_arp_d_paging_btm_next_2?ie=UTF8&reviewerType=all_reviews&pageNumber=39'
driver=webdriver.Chrome()
driver.get(link)
elements=WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,".a-icon-alt")))
for i in elements:
print(i.get_attribute("innerHTML").split(' ')[0])
控制台输出:
4.3
5.0
1.0
5.0
2.0
4.0
1.0
5.0
5.0
5.0
5.0
5.0
5.0
推荐阅读
- javascript - 将大型 JSON/JS 对象从内容脚本压缩到 background.js - chrome 扩展
- java - Spring Boot 2 使用多个数据源禁用 Autocommit Hikari
- javascript - 如何在一个简单的网页上检查 H2 标签与未来 1 周的日期
- mysql - 如何将字符串中的月份名称转换为短月份
- android - 在处理单选按钮时如何在android中使用if else阶梯
- java - 动态更改初始屏幕的背景颜色
- nginx - Nginx Plus API 后端服务器排空模式
- excel - 删除数组中每个工作簿的用户窗体和模块
- php - PHP联系表单错误发送电子邮件
- c# - 将数组重新缩放为较小的数组,保留平均值