You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Selenium(C#)爬取Gupy网站时搜索框输入超时问题求助

问题描述

使用Selenium结合C#爬取招聘网站Gupy时,ChromeDriver启动后网站弹出弹窗,关闭弹窗后程序操作搜索框时出现“Timed out after 20 seconds”错误,无法输入内容。需求是关闭弹窗后在搜索框输入内容并按下回车键。

代码示例

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JobWebScraper
{
    public class AutomationWeb
    {
        public IWebDriver driver;

        public AutomationWeb() 
        {
            var options = new ChromeOptions();
            options.AddArgument("no-sandbox");
            driver = new ChromeDriver(); //打开Chrome浏览器
        }

        public void TestWeb()
        {
            driver.Navigate().GoToUrl("https://portal.gupy.io/?int_ref=navbar-candidatos");

            driver.FindElement(By.XPath("//*[@id=\"radix-0\"]/div[2]/button")).Click();

            // 使用显式等待等待搜索输入框可点击后输入内容
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));

            // 等待搜索输入框可点击后输入内容
            IWebElement searchInput = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id=\"react-aria-9\"]")));

            // 元素可点击后直接输入
            searchInput.SendKeys("desenvolvedor");
            searchInput.SendKeys(Keys.Enter);
        }
    }
}

网站界面截图

Gupy网站界面

解决方案

1. 替换不稳定的元素定位器

你使用的react-aria-9是动态生成的ID,页面加载或刷新后会变化,导致定位失败。建议改用稳定的定位方式:

  • 优先通过placeholder属性定位:By.CssSelector("input[placeholder='Buscar vagas, empresas ou palavras-chave']")
  • 或通过父容器结合标签定位:By.CssSelector("div[role='search'] input")

2. 优化弹窗关闭逻辑

关闭弹窗前先等待按钮可点击,关闭后等待弹窗完全消失,避免遮挡后续元素:

// 等待关闭按钮可点击
IWebElement closeBtn = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id=\"radix-0\"]/div[2]/button")));
closeBtn.Click();
// 等待弹窗消失
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.XPath("//*[@id=\"radix-0\"]")));

3. 强化显式等待条件

同时验证元素的可见性和可编辑状态,确保元素完全加载完成:

IWebElement searchInput = wait.Until(driver => 
{
    var element = driver.FindElement(By.CssSelector("input[placeholder='Buscar vagas, empresas ou palavras-chave']"));
    return element.Displayed && element.Enabled;
});

4. 添加页面加载完成等待

在打开URL后,等待页面DOM加载完成再执行后续操作:

driver.Navigate().GoToUrl("https://portal.gupy.io/?int_ref=navbar-candidatos");
wait.Until(driver => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

完整修改后的代码

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;
using System;

namespace JobWebScraper
{
    public class AutomationWeb
    {
        public IWebDriver driver;
        private WebDriverWait wait;

        public AutomationWeb() 
        {
            var options = new ChromeOptions();
            options.AddArgument("no-sandbox");
            driver = new ChromeDriver();
            wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); //延长等待时间到30秒
        }

        public void TestWeb()
        {
            driver.Navigate().GoToUrl("https://portal.gupy.io/?int_ref=navbar-candidatos");
            
            // 等待页面加载完成
            wait.Until(driver => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

            // 等待弹窗关闭按钮可点击并关闭
            IWebElement closeBtn = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*[@id=\"radix-0\"]/div[2]/button")));
            closeBtn.Click();
            // 等待弹窗消失
            wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.XPath("//*[@id=\"radix-0\"]")));

            // 定位搜索框(用稳定的CSS选择器)
            IWebElement searchInput = wait.Until(driver => 
            {
                var element = driver.FindElement(By.CssSelector("input[placeholder='Buscar vagas, empresas ou palavras-chave']"));
                return element.Displayed && element.Enabled;
            });

            // 输入内容并回车
            searchInput.SendKeys("desenvolvedor");
            searchInput.SendKeys(Keys.Enter);
        }
    }
}

内容的提问来源于stack exchange,提问作者olamundo97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 18:33:34