Korzystam czasami z Selenium WebDriver oraz ChromeDriver by automatyzować działanie przeglądarki Chrome. Jednak gdy tworzę nowy "driver" i korzystam z metody get() to otwierana jest nowa przeglądarka (nowe okno Chrome), a mnie zależy by "podłączyć się" do otwartej już przeglądarki i konkretnej zakładki oraz strony na niej otwartej. Chodzi o dostęp do strony na której dokonałem już logowania (a wykonanie logowania programowo ze względu na np. 2FA nastręcza sporo trudności).
Macie jakiś pomysł?
Chodzi głównie o Linuxa, ale od biedy może być rozwiązanie dla Winzgrozy.
TU jest co nie co, ale niedokładnie to co potrzebuję.
Nie mam doświadczenia w tym. Pierwsze co mi przychodzi do głowy to otworzyć skryptem przeglądarke, uśpić go na 3minuty lub ile bedzie trzeba na czas rolgowania, a po tym czasie zrobi reszte. Próbowałem kiedyś ChromeDriver użyć do strony która ładowała dane za pomocą JS ale nie chciało mi to działać. Problem był taki, że te dane ładowały się długo, około minuty a nawet dłużej, próbowałem użyć opcji żeby driver czekał na załadowanie i wyrenderowanie strony ale nie chciało mi to działać. To chyba była strona w Reakcie albo czymś podobnym napisana. Może Ty wiesz jak takie strony w Selenium ładować? :)
Jest w Selenium Implicit Wait i Explicit Wait. TU jest to dobrze wytłumaczone. Minuta to bardzo bardzo długo, ale w takim wypadku można zwiększyć czas oczekiwania np. na 90-100 sekund.
Generalnie w tym przypadku o którym piszesz zrobiłbym tak: 1. Poszukać elementu (tekstu, grafiki, przycisku, etc.) strony który ładowany jest na samym końcu - w DevTools można podejrzeć jakie linki są pobierane na końcu. 2. Pobrać selektor CSS czy XPath lub inny do tego elementu 3. Skorzystać z kodu jak poniżej:
driver.implicitly_wait(90) # Niech strona się wreszcie wczyta WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "react-select-3-input"))).send_keys(address)
Tutaj czekamy (do 20 sekund) aż element będzie klikalny (czyli musi się pojawić i nie może być wyłączony) i jak będzie klikalny to wysyłamy jakiś tekst do elementu (tu input) o wskazanym ID. Ale można użyć opcji visilbility (element widoczny), presence (obecny), itp.
....tylko doczytałem, że w przypadku React.js czy Angular.js może to nie działać prawidłowo - odsyłam do tego wątku.