2017-10-10 163 views
8

我很努力地在python中找到一種方法,它允許您讀取當前使用的Web瀏覽器中的數據。實際上,我試圖在本地控制的公司網頁上下載大量的數據數據框並將其實施到數據框中。問題是,該網站有一個相當複雜的身份驗證令牌進程,我無法使用各種用戶參數使用一系列的webdrivers,Requests,urllib和cookielib來繞過Selenium。我完全放棄了這方面的工作,因爲我幾乎肯定認證過程比使用這些庫可以輕鬆實現更多。Python - 從當前瀏覽器操作和讀取瀏覽器

但是,當我快速測試在當前已使用WebBrowser登錄的瀏覽器中打開新選項卡時,我設法繞過了所需的標記化過程。通常情況下,WebBrowser不提供讀取功能,這意味着即使頁面可以打開,頁面上的數據也不能讀入熊貓數據框。這讓我想到我可以使用Win32com,打開瀏覽器,登錄,然後運行腳本的其餘部分,但是再次,對於Internet Explorer而言,調度沒有一般的讀取能力,這意味着我無法發送我想要熊貓的信息。我很難過。有任何想法嗎?

我可以獲得必要的身份驗證令牌腳本,但我相信在這種情況下會發生任何事情需要一兩個星期。當我等待公司的實際授權腳本時,我顯然更願意在此期間獲得某些東西。

更新:我收到來自公司的身份驗證令牌,但它需要在另一臺服務器上使用python包,我也沒有訪問權限,主要是因爲它在我的部門中使用Python的怪事。因此,上述情況仍然適用 - 需要一種閱讀和操作打開的瀏覽器的方法。

+0

Selenium可以與桌面上的現有瀏覽器窗口一起工作,您可以再試一次。 – georgexsh

+0

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

+0

如果我瞭解上述權利,上述所需的功能決定永遠不會被合併。在評論中對這個問題有一些解決方案,但它們都是用其他編程語言。 – WolVes

回答

8

步驟

1)用Selenium啓動瀏覽器。

2)腳本應該開始等待一個通知你,你有需要的頁面並登錄某些元素。

3)你可以使用這個新的瀏覽器窗口來手動登錄頁面。

4)腳本檢測到你需要的頁面並登錄。

5)腳本處理頁面你喜歡的方式。

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. 

如果您使用Chrome用戶的個人資料可能會更容易。這樣您可能會繼續前一個會話,因此您不需要執行任何登錄操作。

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

請儘可能修復我的英文。 –