调用driver.get访问谷歌搜索结果链接时触发InvalidArgumentException
问题分析与解决
InvalidArgumentException出现在driver.get(i)语句,核心原因是你提取的i不是有效URL,结合代码细节,具体问题和修复方案如下:
1. URL提取逻辑错误
你当前从div[@class='yuRUbf']元素取href属性,但这个div本身没有href属性,真正的链接在它下方的<a>标签里。修改提取逻辑:
linkedin_urls = [my_elem.find_element(By.TAG_NAME, "a").get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='yuRUbf']")))]
2. 谷歌搜索未实现翻页
循环for x in range(0,20,10)中的x变量未被使用,每次都访问同一页,导致爬取重复链接。需在URL中加入start参数实现翻页:
base_url = 'https://www.google.com/search?q=site%3Alinkedin.com%2F+AND+%22managing+director+%40+Morgan+Stanley%22+AND+%22New+York+City+Metropolitan+Area%22&rlz=1C1ONGR_enUS1012US1012&ei=7totZJioCr6dptQPi4qR4Ag&ved=0ahUKEwiY1_KOy5P-AhW-jokEHQtFBIwQ4dUDCBA&oq=site%3Alinkedin.com%2F+AND+%22managing+director+%40+Morgan+Stanley%22+AND+%22New+York+City+Metropolitan+Area%22&gs_lcp=Cgxnd3Mtd2l6LXNlcnAQDEoECEEYAFAAWABgAGgAcAB4AIABAIgBAJIBAJgBAA&sclient=gws-wiz-serp' for x in range(0,20,10): driver.get(f'{base_url}&start={x}') # 加入start参数实现翻页 sleep(randint(3,5)) # 此处使用修复后的URL提取逻辑
3. 嵌套列表冗余处理
Lnks是嵌套列表(每个页面对应一个子列表),遍历前可先展开,避免两层循环的冗余:
# 展开嵌套列表 all_links = [link for sublist in Lnks for link in sublist] for link in all_links: if link: # 先判断链接是否有效,避免空值报错 driver.get(link) sleep(randint(3,5)) # 在此处添加提取数据到Jobdata的逻辑,例如: # person_name = driver.find_element(By.XPATH, "//h1").text # Jobdata.append({"name": person_name, "url": link})
4. 反爬注意事项
谷歌对自动化工具检测严格,建议:
- 使用
--headless=new模式运行Chrome,降低被检测概率 - 随机化User-Agent,避免固定标识
- 用
WebDriverWait替代固定sleep,更高效且更符合正常浏览逻辑 - 延长随机等待时间,避免短时间内频繁请求触发验证码
最后将爬取到的Jobdata转为pandas DataFrame:
import pandas as pd df = pd.DataFrame(Jobdata)
内容的提问来源于stack exchange,提问作者Aymenm23
相关产品推荐
相关产品推荐

