c#搜索发送键

c#搜索发送键,c#,selenium-webdriver,C#,Selenium Webdriver,我想在youtube上搜索一下。页面打开,点击搜索,但我在写作时出错 OpenQA.Selenium.ElementNotInteractableException: 'element not interactable 您的方法有几个问题: 您正在按.Id查找的元素应该是“搜索”,而不是“搜索表单” youtube.com主页上有4个元素的id为“搜索” 当您访问元素时,页面可能无法完全加载。您使用的WebDriverWait也不正确 解决方案: 找到id为“search”的所有元素,然

我想在youtube上搜索一下。页面打开,点击搜索,但我在写作时出错

OpenQA.Selenium.ElementNotInteractableException: 'element not interactable

您的方法有几个问题:

  • 您正在按.Id查找的元素应该是“搜索”,而不是“搜索表单”
  • youtube.com主页上有4个元素的id为“搜索”
  • 当您访问元素时,页面可能无法完全加载。您使用的
    WebDriverWait
    也不正确
解决方案:

  • 找到id为“search”的所有元素,然后抓取输入元素:
var chromeDriverService=chromeDriverService.CreateDefaultService();
chromedDriverService.hideCommand和PromptWindow=true;
ChromeOptions选项=新的ChromeOptions();
options.AddUserProfilePreference(“profile.default\u content\u setting\u values.images”,2);
options.AddArgument(“开始最大化”);
options.AddArgument(“禁用信息栏”);
options.AddArgument(“--disable extensions”);
var驱动程序=新的ChromeDriver(ChromeDriver服务,选项);
driver.Navigate().gotour(“https://www.youtube.com/");
//新代码-在输入元素准备好后,获取id为“search”的输入元素
WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.From毫秒(1500));
var elementsWithSearchID=wait.Until((driver)=>driver.FindElements(By.Id(“搜索”));
var search=elementsWithSearchID.Where(e=>e.TagName==“输入”).FirstOrDefault();
//无需单击它-只需发送带有“\n”的文本即可,
//它模拟键入文本并按enter键
search.SendKeys(“Hello\n”);

我知道您的问题是针对将键发送到搜索框,但作为一种解决方法,您可以发送查询中的参数吗?例如driver.Navigate().gotour(“);顺便说一句,我不想把之前的答案作为答案发布,只是当时我没有足够的代表发表评论(50个代表),我刚刚获得了这个能力。我可以键入url搜索,但这不是我想要的。进入youtube后,它将执行我想要的搜索。这回答了你的问题吗?没有,我尝试过,但不起作用。你尝试了回答中描述的延迟方法吗?注意,
Thread.Sleep
与我不一样。发布时,你的问题是重复的;如果可以的话请根据重复的答案更新您的代码,并解释什么不起作用,我将撤回投票,以重复方式结束此问题。谢谢!那么我如何在搜索结果中捕获频道匹配?例如,单击频道名称为“Khans歌词”的视频“在结果中。@MesutBla请自己试一试,如果您有无法解决的问题,请在StackOverflow上提出新问题。请务必发布相关详细信息,并解释您尝试了什么,以及问题是什么。非常感谢。我明白了,你是对的。非常感谢你。我正在处理它,如果我不能解决它,我会打开一个新的话题。
var chromeDriverService = ChromeDriverService.CreateDefaultService();
            chromeDriverService.HideCommandPromptWindow = true;
            IWebDriver driver;
            ChromeOptions options = new ChromeOptions();
            options.AddUserProfilePreference("profile.default_content_setting_values.images", 2);
            options.AddArgument("start-maximized");
            options.AddArgument("disable-infobars");
            options.AddArgument("--disable-extensions");
            driver = new ChromeDriver(chromeDriverService, options);
            driver.Navigate().GoToUrl("https://www.youtube.com/");
            IWebElement search = driver.FindElement(By.Id("search-form"));
            search.Click();
            WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 10));
            search.SendKeys("xyz");