Я использую селен, чтобы попасть на YouTube и написать что-то в строке поиска, а затем нажать кнопку или нажать клавишу ввода.
И щелчок, и нажатие клавиши иногда работают, но иногда нет.
Пробовал ждать с WebDriverWait
, и даже менял время ожидания с 10 до 20 секунд, но это не имело никакого значения.
И если я что-нибудь добавлю (например, распечатаю новый заголовок страницы), он покажет мне только заголовок первой страницы, а не заголовок после поиска.
Вот мой код и то, что я пробовал:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def get_driver():
firefox_options = Options()
# firefox_options.add_argument("--headless")
driver = webdriver.Firefox(executable_path=r"C:\Program Files\Mozilla Firefox\geckodriver.exe", options=firefox_options)
driver.implicitly_wait(9)
return driver
driver = get_driver()
driver.get('https://www.youtube.com/')
search = driver.find_element(By.XPATH, '//input[@id = "search"]')
search.send_keys("python")
# search.send_keys(Keys.ENTER) #using the enter key # If I add nothing after this line it work
# searchbutton = driver.find_element(By.XPATH,'//*[@id = "search-icon-legacy"]') # This also dose doesn't work
# searchbutton.click() # using the click method() #also dose not work
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id = "search-icon-legacy"]'))).click() # Sometimes work
# driver.implicitly_wait(10)
# print(driver.title) # This show me only the title of the first page not the one after the search
Это потому, что я использую веб-драйвер Firefox (должен ли я перейти на Chrome)? Или это из-за моего интернет-соединения?
Чтобы это работало, вам нужно сначала щелкнуть поле поиска, затем добавить короткую задержку, а затем отправить элемент Keys.ENTER
или щелкнуть search-icon-legacy
.
Так что это не ваша вина, так работает веб-страница YouTube. Можно даже назвать это своего рода ошибкой. Но поскольку эта веб-страница создана для пользователей-людей, она работает хорошо, поскольку человек никогда не нажмет на поле ввода и не вставит туда значение поиска за нулевое время.
В любом случае, работают 2 следующих кода:
Первый.
import time
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("start-maximized")
options.add_argument('--disable-notifications')
webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(options=options, service=webdriver_service)
wait = WebDriverWait(driver, 10)
url = "https://www.youtube.com/"
driver.get(url)
search = wait.until(EC.element_to_be_clickable((By.XPATH, '//input[@id = "search"]')))
search.click()
time.sleep(0.2)
search.send_keys("python")
wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id = "search-icon-legacy"]'))).click()
Второй.
import time
from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("start-maximized")
options.add_argument('--disable-notifications')
webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(options=options, service=webdriver_service)
wait = WebDriverWait(driver, 10)
url = "https://www.youtube.com/"
driver.get(url)
search = wait.until(EC.element_to_be_clickable((By.XPATH, '//input[@id = "search"]')))
search.click()
time.sleep(0.2)
search.send_keys("python" + Keys.ENTER)
Добро пожаловать! Я всегда рад помочь.
Он работает именно так, как я хочу, и спасибо за подсказку о том, как работает YouTube, большое спасибо