selenium Selify Find_Element_by_id()不起作用

pkmbmrz7  于 2022-11-10  发布在  其他
关注(0)|答案(5)|浏览(369)

当我使用Selify转到https://www.youtube.com并尝试使用find_ement_by_id()并使用“masthead-earch-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")
mzaanser

mzaanser1#

您的代码是正确的。使用一些等待来定位该元素。试试这个代码:

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");
kxeu7u2r

kxeu7u2r2#

你必须注意以下几件事:
1.在使用Chrome浏览器时,尽量以最大化模式打开,同时关闭infobExpansion,以最大限度地使用Viewport
1.访问URL*https://www.youtube.com后,要么等待加载器消失,要么等待搜索框可点击。
1.确保您使用的货位是唯一且正确的。在Firefox Quantum 57.0b3 (64-bit)浏览器的
Dev Tools*中,搜索框的XPath表达式似乎是//input[@id='search']
1.以下是浏览器的工作代码块:

import selenium.webdriver as webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get("https://www.youtube.com")
search_box = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH, "//input[@id='search']"))
)
driver.find_element_by_xpath("//input[@id='search']").send_keys("Selenium")
t9aqgxwy

t9aqgxwy3#

这是一个浏览器问题。当我使用Chrome、Firefox或Edge时,我找不到元素。当我使用Internet Explorer时,它会被找到。
当你使用IED驱动程序时,它可能会工作,但使用ChromeDriver就不会了。

2o7dmzc5

2o7dmzc54#

我认为您正在试图找到搜索栏并发送关键字和搜索。不存在ID为*‘MastheHead-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()

其中一种更有趣的方法是使用动作链:

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()
wvyml7n5

wvyml7n55#

正如异常所述,页面上没有包含id="masthead-search-term"的任何元素。
通过检查页面DOM,确保您正在寻找正确的ID。查找搜索栏输入元素的id属性。
我认为搜索栏输入元素ID是search

相关问题