Python-从当前浏览器操作和读取浏览器

Python-从当前浏览器操作和读取浏览器,python,authentication,web-scraping,Python,Authentication,Web Scraping,我正在努力用python找到一种方法,允许您在当前使用的web浏览器中读取数据。实际上,我试图在本地控制的公司网页上下载大量数据帧,并将其实现为数据帧。问题是,该网站有一个相当复杂的身份验证令牌过程,我无法通过使用大量webdriver、Requests、urllib和cookielib(使用各种用户参数)绕过Selenium。我已经完全放弃了这一点,因为我几乎可以肯定的是,身份验证过程中有比使用这些库轻松实现的更多的内容 然而,当我快速测试在当前浏览器中打开一个已经使用登录的新选项卡时,我成功

我正在努力用python找到一种方法,允许您在当前使用的web浏览器中读取数据。实际上,我试图在本地控制的公司网页上下载大量数据帧,并将其实现为数据帧。问题是,该网站有一个相当复杂的身份验证令牌过程,我无法通过使用大量webdriver、Requests、urllib和cookielib(使用各种用户参数)绕过Selenium。我已经完全放弃了这一点,因为我几乎可以肯定的是,身份验证过程中有比使用这些库轻松实现的更多的内容

然而,当我快速测试在当前浏览器中打开一个已经使用登录的新选项卡时,我成功地绕过了所需的标记化过程。传统上,WebBrowser不提供读取功能,这意味着即使可以打开页面,页面上的数据也无法读取到数据帧中。这让我想到我可以使用Win32com,打开浏览器,登录,然后运行脚本的其余部分,但同样,internet explorer的dispatch没有一般的读取能力,这意味着我无法发送我想要发送的信息。我被难住了。有什么想法吗

我可以获得必要的身份验证令牌脚本,但我确信这需要一到两周的时间才能发生任何事情。显然,我更愿意在等待公司提供的实际auth脚本的同时得到一些东西

更新:我从该公司收到了身份验证令牌,但是它需要在另一台我没有访问权限的服务器上使用python包,主要是因为我在我的部门使用python是一个奇怪的现象。因此,上述内容仍然适用-需要一种方法来读取和操作打开的浏览器

一步一步 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")

Selenium可以使用您桌面上现有的浏览器窗口,您可以再试一次。如果我正确理解上述内容,则决定不再合并上述所需功能。评论中有一些解决方案,但都是用其他编程语言编写的。是否真的需要连接到正在运行的浏览器?您可以使用selenium启动浏览器,然后手动进行身份验证(您的脚本可以等待登录后出现的页面),登录完成后,脚本将打开并读取您需要的页面。我不确定您对网络流量的经验如何,但通常您可以做“中间人”浏览器和服务器之间的攻击,例如打嗝()。在获取数据包之前停止最后一个请求,然后将该请求复制到python请求中。如果需要实现自动化,还有一个burp python api。但在我写这篇文章时,我认为它也相当复杂如果可能的话,请修我的英语。