Python使用Selenium写爬虫时报InvalidArgumentException如何解决
问题排查结果
一共有3处错误导致运行异常:
- 第一处:
driver.get()传入参数非法。你传入的是包含<a href>标签的完整HTML字符串,并非纯URL地址,这是直接触发本次InvalidArgumentException异常的原因。 - 第二处:循环逻辑缩进错误。三个列表的
append操作写在for循环外部,只会将循环结束后最后一个遍历到的元素写入列表,如果未匹配到对应元素还会触发空对象调用text属性的报错。 - 第三处:ChromeDriver 初始化写法兼容问题。高版本 Selenium 不支持直接将驱动路径传入
webdriver.Chrome(),需要使用Service类封装路径参数。
修复后完整代码
from bs4 import BeautifulSoup import pandas as pd from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager # 修复初始化写法 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) products=[] #存储商品名称 prices=[] #存储商品价格 ratings=[] #存储商品评分 # 修复入参,只保留纯URL driver.get("https://www.flipkart.com/laptops/~buyback-guarantee-on-laptops-/pr?sid=6bo%2Cb5g&uniqBStoreParam1=val1&wid=11.productCard.PMU_V2") content = driver.page_source soup = BeautifulSoup(content, 'html.parser') for a in soup.findAll('a',href=True, attrs={'class':'_31qSD5'}): name=a.find('div', attrs={'class':'_3wU53n'}) price=a.find('div', attrs={'class':'_1vC4OE _2rQ-NK'}) rating=a.find('div', attrs={'class':'hGSR34 _2beYZw'}) # 修复缩进,移入循环内部,增加非空判断避免报错 if name and price and rating: products.append(name.text) prices.append(price.text) ratings.append(rating.text) df = pd.DataFrame({'Product Name':products,'Price':prices,'Rating':ratings}) df.to_csv('products.csv', index=False, encoding='utf-8') # 运行结束关闭驱动 driver.quit()
内容的提问来源于stack exchange,提问作者BruceyBandit
相关产品推荐
相关产品推荐

