2017-10-10 89 views
8

Staram się znaleźć metodę w Pythonie, która pozwala na odczyt danych w aktualnie używanej przeglądarce internetowej. W rzeczywistości próbuję pobrać ogromną ramkę danych na lokalnie kontrolowanej stronie firmy i zaimplementować ją w ramce danych. Problem polega na tym, że strona ma dość skomplikowany proces tokenów uwierzytelniania, którego nie udało mi się ominąć przy użyciu Selenium przy użyciu wielu webdrivers, Requests, urllib i cookielib przy użyciu różnych parametrów użytkownika. Całkowicie zrezygnowałem z tego frontu, ponieważ jestem prawie pewien, że proces uwierzytelniania jest czymś więcej, niż można łatwo osiągnąć dzięki tym bibliotekom.Python - Manipuluj i czytaj przeglądarkę z bieżącej przeglądarki

Jednak udało mi się ominąć wymagany proces tokenizacji, gdy szybko przetestowałem otwarcie nowej karty w bieżącej przeglądarce, która była już zalogowana za pomocą WebBrowser. Klasycznie, WebBrowser nie oferuje funkcji odczytu, co oznacza, że ​​nawet jeśli strona może zostać otwarta, danych na stronie nie można odczytać w ramce danych pandy. To sprawiło, że pomyślałem, że mogę użyć Win32com, otworzyć przeglądarkę, zalogować się, a następnie uruchomić resztę skryptu, ale znowu, nie ma ogólnej zdolności odczytu dla eksploratora internetowego, co oznacza, że ​​nie mogę wysłać informacji, którą chcę do pandy . Jestem zdumiony. Jakieś pomysły?

Mogłabym zdobyć niezbędne skrypty tokena uwierzytelniającego, ale jestem pewien, że zajmie to tydzień lub dwa, zanim cokolwiek stanie się na tym froncie. Oczywiście wolałbym dostać coś w międzyczasie, podczas gdy czekam na prawdziwe skrypty auth od firmy.

Aktualizacja: Otrzymałem tokeny uwierzytelniające od firmy, jednak wymaga to użycia pakietu Pythona na innym serwerze, nie mam też dostępu, głównie dlatego, że jest to dziwne, że używam Pythona w moim dziale. Tak więc powyższe nadal obowiązuje - potrzebujemy metody czytania i manipulowania otwartą przeglądarką.

+0

Selen może pracować z istniejącym oknem przeglądarki na pulpicie, możesz spróbować jeszcze raz. – georgexsh

+0

https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/18 – WolVes

+0

Jeśli rozumiem powyższe prawo, powyższa pożądana funkcja została podjęta, aby nigdy nie zostać zarejestrowanym. W komentarzach są pewne rozwiązania tego problemu, ale wszystkie są w innych językach programowania. – WolVes

Odpowiedz

8

Krok po kroku

1) Uruchom przeglądarkę z selenem.

2) Skrypt powinien rozpocząć oczekiwanie na pewien element, który poinformuje cię, że uzyskał przewidziane stronę i zalogować się.

3) Można użyć tego nowego okna przeglądarki, aby zalogować się do strony ręcznie.

4) skrypt wykryje, że jesteś na wybranej stronie i zalogowany.

5) Script przetwarza stronę tak, jak lubisz.

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 

# start webdriver (opens Chrome in new window) 
chrome = webdriver.Chrome() 

# initialize waiter with maximum 300 seconds to wait. 
waiter = WebDriverWait(chrome , 300) 

# Will wait for appear of #logout element. 
# I assume it shows that you are logged in. 
wait.until(EC.presence_of_element_located(By.ID, "logout")) 

# Extract data etc. 

To może być łatwiejsze, jeśli używasz profilu użytkownika Chrome. W ten sposób możesz kontynuować poprzednią sesję, więc nie będziesz musiał wykonywać żadnych akcji logowania.

options = webdriver.ChromeOptions() 
options.add_argument("user-data-dir=FULL_PATH__TO_PROFILE") 
chrome = webdriver.Chrome(chrome_options=options) 
chrome.get("https://your_page_here") 
+0

Napraw swój angielski, jeśli to możliwe. –