鱼C论坛

 找回密码
 立即注册
查看: 1628|回复: 10

[已解决]selenium

[复制链接]
发表于 2023-7-19 11:13:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问这个下一页按钮怎么定位不到呢
import re
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

page = 3
list_1 = []
index_url = 'https://www.lagou.com/'
path = 'D:/技能/chromedriver.exe'
brower = webdriver.Chrome(executable_path=path)
brower.get(index_url)
time.sleep(50)
search_box = brower.find_element(By.XPATH,'//*[@id="search_input"]')
search_button = brower.find_element(By.XPATH,'//*[@id="search_button"]')
search_box.send_keys('python')
next_button = brower.find_element(By.XPATH,'//*[@id="jobList"]/div[3]/ul/li[9]/a')
time.sleep(2)
search_button.click()
time.sleep(5)
pattern = re.compile('"positionId":(\d+)', re.S)
list_1 += re.findall(pattern, brower.page_source)
print('爬取第1页')
next_button.click()
for i in range(2,page+1):
    list_1 += re.findall(pattern, brower.page_source)
    next_button.click()
    print(f'爬取第{i}页')


print(len(list_1))
print(list_1)
brower.close()
这个是我的报错信息
最佳答案
2023-7-19 11:13:37
根据您提供的代码和报错信息,错误发生在定位下一页按钮的那行代码上。报错提示说明无法找到该元素。

定位元素时,常见的问题包括元素路径不正确、页面尚未完全加载或元素被覆盖等。以下是可能导致无法定位到下一页按钮的一些原因和解决方法:

1. 页面加载时间不足:在点击搜索按钮之后,您使用了time.sleep(5)来等待页面加载。但是,这种固定的等待时间可能不够,特别是在网络状况较差或网页内容加载较慢的情况下。建议使用显式等待来等待页面加载完成,例如使用WebDriverWait类来等待元素出现。

   示例代码:

   from selenium.webdriver.support.ui import WebDriverWait   from selenium.webdriver.support import expected_conditions as EC   # 在点击搜索按钮后,等待页面加载完成   wait = WebDriverWait(brower, 10)   wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="jobList"]/div[3]/ul/li[9]/a')))   
2. 元素路径不正确:检查XPath路径是否正确。如果页面结构或布局发生变化,可能会导致XPath路径失效。可以使用浏览器的开发者工具重新检查元素的XPath路径,并确保它仍然有效。

3. 元素在iframe中:如果下一页按钮位于iframe内部,您需要先切换到该iframe,然后再查找元素。可以使用switch_to.frame()方法进行切换。

   示例代码:

   iframe = brower.find_element(By.XPATH, '//*[@id="iframe_id"]')   brower.switch_to.frame(iframe)   # 然后再定位下一页按钮   
通过检查上述可能的原因并尝试相应的解决方法,您应该能够成功定位到下一页按钮。希望这些信息对您有所帮助!如果您有任何进一步的问题,请随时提问。
屏幕截图(79).png
屏幕截图(80).png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-19 11:13:37 | 显示全部楼层    本楼为最佳答案   
根据您提供的代码和报错信息,错误发生在定位下一页按钮的那行代码上。报错提示说明无法找到该元素。

定位元素时,常见的问题包括元素路径不正确、页面尚未完全加载或元素被覆盖等。以下是可能导致无法定位到下一页按钮的一些原因和解决方法:

1. 页面加载时间不足:在点击搜索按钮之后,您使用了time.sleep(5)来等待页面加载。但是,这种固定的等待时间可能不够,特别是在网络状况较差或网页内容加载较慢的情况下。建议使用显式等待来等待页面加载完成,例如使用WebDriverWait类来等待元素出现。

   示例代码:

   from selenium.webdriver.support.ui import WebDriverWait   from selenium.webdriver.support import expected_conditions as EC   # 在点击搜索按钮后,等待页面加载完成   wait = WebDriverWait(brower, 10)   wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="jobList"]/div[3]/ul/li[9]/a')))   
2. 元素路径不正确:检查XPath路径是否正确。如果页面结构或布局发生变化,可能会导致XPath路径失效。可以使用浏览器的开发者工具重新检查元素的XPath路径,并确保它仍然有效。

3. 元素在iframe中:如果下一页按钮位于iframe内部,您需要先切换到该iframe,然后再查找元素。可以使用switch_to.frame()方法进行切换。

   示例代码:

   iframe = brower.find_element(By.XPATH, '//*[@id="iframe_id"]')   brower.switch_to.frame(iframe)   # 然后再定位下一页按钮   
通过检查上述可能的原因并尝试相应的解决方法,您应该能够成功定位到下一页按钮。希望这些信息对您有所帮助!如果您有任何进一步的问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:13:52 | 显示全部楼层
你的问题可能与以下几个因素有关:

1. 页面加载时间:可能在你尝试定位元素时,页面还没有完全加载。你可以尝试增加 time.sleep() 的等待时间,或者使用 WebDriverWait 来等待元素加载完成。

2. XPATH的正确性:可能你的XPATH不正确,或者元素在iframe中。你可以尝试在浏览器的开发者工具中检查元素的XPATH是否正确,或者检查元素是否在iframe中。

3. 动态加载的元素:如果元素是动态加载的,那么可能在页面加载完成后才会出现。这种情况下,你可以使用 WebDriverWait 等待元素出现。

在你的代码中,你在查找下一页按钮的XPATH时,可能是在页面加载完成前就开始查找,导致找不到元素。你可以尝试在点击搜索按钮后,使用 WebDriverWait 等待元素加载完成,然后再查找下一页按钮。

下面是一个使用 WebDriverWait 的示例:
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECbrower = webdriver.Chrome(executable_path=path)brower.get(index_url)search_box = WebDriverWait(brower, 10).until(    EC.presence_of_element_located((By.XPATH, '//*[@id="search_input"]')))search_button = WebDriverWait(brower, 10).until(    EC.presence_of_element_located((By.XPATH, '//*[@id="search_button"]')))search_box.send_keys('python')search_button.click()next_button = WebDriverWait(brower, 10).until(    EC.presence_of_element_located((By.XPATH, '//*[@id="jobList"]/div[3]/ul/li[9]/a')))next_button.click()
这段代码会在查找元素前等待10秒,如果在10秒内元素出现,则继续执行代码;如果10秒内元素未出现,则抛出异常。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:14:03 | 显示全部楼层
报错信息没有提供,但是根据代码的逻辑,可能出现问题的地方是定位下一页按钮的地方。请确保next_button元素的XPath表达式是准确的,可以通过检查网页源代码来确认。另外,请注意等待页面加载完成后再进行元素的查找和操作,可以使用WebDriverWait来设置显式等待。以下是修改建议的代码:
import re
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

page = 3
list_1 = []
index_url = 'https://www.lagou.com/'
path = 'D:/技能/chromedriver.exe'
brower = webdriver.Chrome(executable_path=path)
brower.get(index_url)
time.sleep(50)
search_box = brower.find_element(By.XPATH, '//*[@id="search_input"]')
search_button = brower.find_element(By.XPATH, '//*[@id="search_button"]')
search_box.send_keys('python')
search_button.click()
time.sleep(5)

pattern = re.compile('"positionId":(\d+)', re.S)
list_1 += re.findall(pattern, brower.page_source)
print('爬取第1页')

for i in range(2, page+1):
    # 显式等待下一页按钮可点击
    next_button = WebDriverWait(brower, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="jobList"]/div[3]/ul/li[9]/a')))
    list_1 += re.findall(pattern, brower.page_source)
    next_button.click()
    print(f'爬取第{i}页')
    time.sleep(2)

print(len(list_1))
print(list_1)
brower.close()
注意,以上只是修改建议,并没有完全了解你的页面结构和需求。如果还有报错,请提供完整的报错信息。


注:此回答由 GPT 生成,其他类似回答也是 GPT 生成,仅供参考。如果遇到非 GPT 回答请优先采纳。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:16:06 | 显示全部楼层
isdkz 发表于 2023-7-19 11:13
你的问题可能与以下几个因素有关:

1. 页面加载时间:可能在你尝试定位元素时,页面还没有完全加载。你可 ...


草,慢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:17:36 | 显示全部楼层

selenium肯定慢呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:18:01 | 显示全部楼层
isdkz 发表于 2023-7-19 11:17
selenium肯定慢呀

估计得……
占楼大法!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 11:19:17 | 显示全部楼层
isdkz 发表于 2023-7-19 11:13
你的问题可能与以下几个因素有关:

1. 页面加载时间:可能在你尝试定位元素时,页面还没有完全加载。你可 ...

好的,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 11:20:01 | 显示全部楼层
陶远航 发表于 2023-7-19 11:13
根据您提供的代码和报错信息,错误发生在定位下一页按钮的那行代码上。报错提示说明无法找到该元素。

定位 ...

好的,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 11:20:39 | 显示全部楼层
歌者文明清理员 发表于 2023-7-19 11:14
报错信息没有提供,但是根据代码的逻辑,可能出现问题的地方是定位下一页按钮的地方。请确保next_button元 ...

好的,感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 11:21:41 | 显示全部楼层
歌者文明清理员 发表于 2023-7-19 11:14
报错信息没有提供,但是根据代码的逻辑,可能出现问题的地方是定位下一页按钮的地方。请确保next_button元 ...

selenium比requests慢

建议:
不用脚本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 18:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表