selenium搜索问题

在使用selenium上的一些小问题,但是自己debug快要疯掉啦
本人初次接触selenium,刚入门不久后想从一个网站上爬一些数据,具体流程为:进入百度--》在搜索框中输入关键词--》搜索完毕点进其中一个网站--》进入网站内爬取数据,而在最后一步中使用xpath无论如何都无法定位到需要的数据,甚至无法搜索到该网站的搜索框。
以下为具体的代码:

img


在csdn上寻找了许多解决方法,排除了xpath路径错误(使用chrome浏览器中的copy功能),句柄切换(切换后仍然报错),未设置等待时间(强制等待与隐式等待都已使用后仍然报错)
如图,在网站寻找所需内容时报错:

img


希望先辈们能够进行指教指导,后辈不胜感激!

img

xpath可能不是很准确,可以采用其它辅助的手段来帮助正确获取。比如css的选择器等

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我可以尝试解决这个问题。根据您提供的信息,问题可能出现在搜索框定位和网站句柄切换上。以下是一些可能的解决方案:

    1. 使用WebDriverWait和expected_conditions来等待搜索框的加载。
    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
    
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com/")
    wait = WebDriverWait(driver, 10)
    search_box = wait.until(EC.presence_of_element_located((By.ID, "kw")))
    search_box.send_keys("关键词")
    
    1. 尝试使用CSS选择器来定位搜索框。
    search_box = driver.find_element_by_css_selector("input#kw")
    
    1. 如果网站有iframe,需要先切换进去才能定位元素。
    iframe = driver.find_element_by_css_selector("iframe.iframe-class")
    driver.switch_to.frame(iframe)
    element = driver.find_element_by_xpath("//div[@class='myclass']")
    
    # 切回到默认的上下文
    driver.switch_to.default_content()
    
    1. 如果网站有弹出窗口,需要先切换窗口才能找到需要的元素。
    parent_window = driver.current_window_handle
    # 点击弹出窗口的按钮或链接
    # ...
    # 切换到新窗口
    for handle in driver.window_handles:
        if handle != parent_window:
            driver.switch_to.window(handle)
            break
    element = driver.find_element_by_xpath("//div[@class='myclass']")
    # 切回到原来的窗口
    driver.switch_to.window(parent_window)
    
    1. 如果网站有动态加载的元素,可以尝试使用Scrapy Splash来模拟浏览器的操作,从而获取元素的内容。

    以上是我可能的解决方案,但也可能出现其他问题。如果您能提供更具体的代码和报错信息,我可以更好地为您解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^