Selenium find_element_by_id不起作用

时间:2017-09-27 19:21:01

标签: python selenium

当我使用Selenium转到https://www.youtube.com并尝试使用find_element_by_id选择搜索栏并使用" masthead-search-term"作为ID,我收到如下错误:

Traceback (most recent call last):
File "C:\Users\lauri\Desktop\Projects\Python Projects\test.py", line 9, in <module>
driver.find_element_by_id("masthead-search-term")
File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 341, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 843, in find_element
'value': value})['value']
File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 308, in execute
self.error_handler.check_response(response)
File "D:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"masthead-search-term"}

为什么?这是代码:

import selenium.webdriver as webdriver
driver = webdriver.Chrome(executable_path="D:\Applications\chromedriver")
driver.get("https://www.youtube.com")
driver.find_element_by_id("masthead-search-term")

5 个答案:

答案 0 :(得分:0)

你的代码是正确的使用一些等待定位元素。试试这段代码

import selenium.webdriver as webdriver
driver = webdriver.Chrome(executable_path="D:\Applications\chromedriver")
driver.get("https://www.youtube.com")
driver.implicitly_wait(10)
driver.find_element_by_id("masthead-search-term").send_keys("Nature")

这是java代码:(如果需要,设置geckodriver)

WebDriver driver=new FirefoxDriver( );

driver.get("https://www.youtube.com");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("masthead-search-term")).sendKeys("Nature");

您还可以使用名称作为定位器

driver.findElement(By.name("search_query")).sendKeys("Nature");

答案 1 :(得分:0)

这是一个浏览器问题。当我使用Chrome,Firefox或Edge I时,找不到该元素。当我使用Internet Explorer时,它被找到了。

当你使用IED驱动程序时,它可能会起作用,但使用Chrome驱动程序时它不会。

答案 2 :(得分:0)

您必须按照以下方式处理以下事项:

  1. 使用Chrome浏览器时尝试以maximized模式打开,同时禁用infobarsextensions,这样您就可以使用最大可用Viewport
  2. 访问网址https://www.youtube.com后,请等待加载程序消失或等待Search Box可点击。
  3. 确保您使用的定位器是唯一且正确的。使用Firefox Quantum 57.0b3 (64-bit)浏览器的 Dev Tools xpath的{​​{1}}似乎是Search Box
  4. 以下是带浏览器的工作代码块:

    //input[@id='search']

答案 3 :(得分:-1)

如异常所述 - 页面中没有id="masthead-search-term"

的元素

通过检查页面DOM确保您正在寻找正确的ID。查找搜索栏输入元素的id属性。

我认为搜索栏输入元素ID为search

答案 4 :(得分:-1)

我认为您正在尝试查找搜索栏并发送密钥和搜索。没有ID 'masthead-search-term'的元素。

我建议更好的方法是:

search_query=your_search_query
driver.get('https://www.youtube.com/results?search_query='+search_query)

如果你想以你已经完成的方式去做,那么它将看起来像:

driver.get(http://www.youtube.com)
driver.find_element_by_id('search').sendKeys('Your_search_query')
driver.find_element_by_id('search-icon-legacy').click()

更有趣的方法之一是使用Action Chains:

driver.get(http://www.youtube.com)
actions = ActionChains(driver)
actions.send_keys('Your_Search_Query')
actions.send_keys(Keys.TAB)
actions.send_keys(Keys.ENTER)
actions.perform()