从Pandas数据框列提取的URL在Selenium中被截断的问题排查求助
问题分析与解决方案
你的问题根源出在URL的提取方式上——你把单行DataFrame对象转成字符串再拆分的操作,会触发pandas默认的长文本截断机制,导致最终传入Selenium的是不完整的URL。
错误原因拆解
当你执行str(df.iloc[[i]]['url'])时,df.iloc[[i]]返回的是一个包含单行数据的DataFrame对象,转成字符串后,pandas会自动截断过长的内容(比如你的谷歌地图URL),最终通过split()[1]拿到的自然是被截断的URL片段。
正确的URL提取方式
直接提取单元格的标量值即可,完全不需要转成整行字符串:
for i in range(0, 2): # 先测试部分元素验证功能是否正常 driver = webdriver.Chrome() # 直接获取单行单列的纯字符串URL url = df.iloc[i]['url'] # 等价写法:df['url'].iloc[i] driver.get(url) time.sleep(5) driver.find_element_by_xpath('//*[@id="QA0Szd"]/div/div/div[1]/div[2]/div/div[1]/div/div/div[2]/div[1]/div[1]/div[2]/div/div[1]/div[2]/span[2]/span[1]/button').click() time.sleep(1)
额外优化建议
另外,不建议在循环内重复创建driver实例——频繁启动/关闭浏览器会极大降低效率,还可能触发反爬机制。推荐把浏览器初始化放在循环外:
# 只初始化一次浏览器 driver = webdriver.Chrome() for i in range(0, 2): url = df.iloc[i]['url'] driver.get(url) time.sleep(5) # 执行点击等操作 driver.find_element_by_xpath('//*[@id="QA0Szd"]/div/div/div[1]/div[2]/div/div[1]/div/div/div[2]/div[1]/div[1]/div[2]/div/div[1]/div[2]/span[2]/span[1]/button').click() time.sleep(1) # 循环结束后统一关闭浏览器 driver.quit()
内容的提问来源于stack exchange,提问作者Maximiliano Vazquez
相关产品推荐
相关产品推荐

