2017-10-10 695 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

请尽可能修复我的英文。 –