Używam selenu i próbuję zmienić sterownik na nową stronę, którą otwiera (ta sama karta). Driver.switch_to nie działa, ponieważ myślę, że jest używany, gdy otwiera się nowe okno sterownik. Current_url również nie działa, ponieważ daje mi adres URL poprzedniej strony i nie mogę dowiedzieć się, jak uzyskać adres URL bieżącej strony
Heres kodu:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver.get("https://www.youtube.com")
searchBar = driver.find_element_by_name("search_query")
searchBar.send_keys("unbox therapy")
searchBar.send_keys(Keys.ENTER)
print(driver.current_url)
To nadal zwraca https://www.youtube.com potrzebuję zapytania, które powinno wyglądać mniej więcej tak https://www.youtube.com/results?search_query=unbox+therapy
3 odpowiedzi
Należy wcześniej dodać trochę czasu oczekiwania driver.current_url
Ponieważ pełne załadowanie witryny zajmuje trochę czasu. Czas ładowania zależy również od szybkości połączenia internetowego i innych czynników. U mnie zadziałało bez czasu oczekiwania.
import time
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver = webdriver.Chrome("/home/teknath/Desktop/chromedriver")
driver.get("https://www.youtube.com")
searchBar = driver.find_element_by_name("search_query")
searchBar.send_keys("unbox therapy")
searchBar.send_keys(Keys.ENTER)
time.sleep(5)
print(driver.current_url)
Jak powiedział Tek Nath, możesz dodać czas oczekiwania, ale możesz też zrobić coś takiego.
searchTerm = "unbox therapy"
replaceSpaceWithPlus(searchTerm)
driver.get("https://www.youtube.com/results?search_query=" + searchTerm)
Odpowiedź @TekNath była we właściwym kierunku i była prawie idealna. Sugeruję jednak unikanie time.sleep(5)
w kodzie, ponieważ:
time.sleep(secs)
zawiesza wykonywanie bieżącego wątku na podaną liczbę sekund. Argumentem może być liczba zmiennoprzecinkowa wskazująca dokładniejszy czas snu. Rzeczywisty czas zawieszenia może być krótszy niż żądany, ponieważ każdy przechwycony sygnał zakończy sleep() po wykonaniu procedury przechwycenia tego sygnału. Ponadto czas zawieszenia może być dłuższy niż żądana o dowolną kwotę ze względu na zaplanowanie innej aktywności w systemie.
Szczegółowa dyskusja w Jak spać WebDriver Python dla milisekund
Alternatywnie możesz wywołać WebDriverWait dla title_contains()
i skorzystać z następujących Strategia lokalizatora:
Blok kodu:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe') driver.get("https://www.youtube.com/") searchBar = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#search"))) searchBar.send_keys("unbox therapy") searchBar.send_keys(Keys.ENTER) WebDriverWait(driver, 10).until(EC.title_contains("unbox therapy")) print(driver.current_url)
Wyjście konsoli:
https://www.youtube.com/results?search_query=unbox+therapy
Podobne pytania
Powiązane pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.