我正试图用Selenium将密钥发送到Youtube搜索框,我尝试过搜索ID和Xpath,但总是收到错误。这些错误包括";消息:元素不可交互";,我哪里错了?
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
PATH = "C:Program Files (x86)chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://youtube.com")
searchbox = driver.find_element("xpath", '//*[@id="search-input"]')
searchbox.send_keys('Jack West')
有两个问题:
第一个:
您的xpath
提供<div>
,但无法将密钥发送到<div>
你必须得到<div>
内的<input>
'//*[@id="search-input"]//input'
稍后它需要点击按钮开始搜索。
第二:
当我运行代码时,浏览器会显示弹出窗口,并要求接受cookie等。这个弹出窗口会阻止访问搜索字段。它需要添加接受它的代码。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
#from webdriver_manager.firefox import GeckoDriverManager
import time
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
#driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))
driver.get("https://youtube.com")
time.sleep(5)
print('cookies')
cookies = driver.find_elements(By.XPATH, '//div[contains(@class,"eom-button-row")]//a')
cookies[1].click()
time.sleep(5)
print('searchbox')
searchbox = driver.find_element(By.XPATH, '//*[@id="search-input"]//input')
searchbox.send_keys('Jack West')
print('searchbox button')
searchbox_button = driver.find_element(By.XPATH, '//button[@id="search-icon-legacy"]')
searchbox_button.click()
但使用url 可能更简单
https://www.youtube.com/results?search_query=Jack+West
并且它不需要点击任何键或按钮。
YouTube为开发人员/程序员提供了API,这应该是首选方法。