运行Selenium代码报get() missing 1 required positional argument: 'url'怎么解决
报错核心原因
你触发该报错的根本原因是没有实例化Chrome驱动对象:
- 原代码里
browser = webdriver.Chrome是把Chrome类本身赋值给了browser变量,并没有创建实际的浏览器实例 - 类直接调用实例方法
get()时,不会自动传入self参数,你传入的url会被识别为self参数,因此方法判定缺少必填的url参数,抛出对应报错
其他需要修正的代码问题
find_element_by_class_name()不支持传入多个类名,原代码里的gLFyf gsfi是两个独立类名,会触发定位失败- 你需要获取多个搜索结果链接,应该用返回元素列表的
find_elements(复数)方法,原代码用的find_element只会返回第一个匹配的元素,无法遍历 - 新版本Selenium已经废弃了
find_element_by_xx系列方法,需要使用By类来指定定位方式 - 谷歌搜索的结果页结构已经更新,原代码里的xpath定位规则无法匹配到现有结构
修正后可运行代码
from selenium import webdriver from selenium.webdriver.common.by import By import time def get_results(search_term): url = "https://www.google.com" # 加括号实例化Chrome驱动,如果ChromeDriver不在系统PATH中,需要传入executable_path参数指定驱动路径 browser = webdriver.Chrome() browser.get(url) # 用css选择器定位搜索框,支持多类名匹配 search_box = browser.find_element(By.CSS_SELECTOR, '.gLFyf.gsfi') search_box.send_keys(search_term) search_box.submit() # 等待页面加载完成,避免定位不到元素 time.sleep(2) # 匹配所有搜索结果的标题链接 links = browser.find_elements(By.XPATH, '//h3/ancestor::a') results = [] for link in links: href = link.get_attribute('href') # 排除非搜索结果的跳转链接 if href and "http" in href: print(href) results.append(href) browser.close() return results get_results('dog')
内容的提问来源于stack exchange,提问作者Spud Productions
相关产品推荐
相关产品推荐

