我正在努力在python中找到一个方法,它允许您在当前使用的Web浏览器中读取数据。实际上,我正在尝试在本地控制的公司网页上下载大量数据框,并将其实施到数据框中。问题是该网站有一个相当复杂的身份验证令牌进程,我无法使用各种用户参数使用大量的webdrivers,Requests,urllib和cookielib来绕过Selenium。我完全放弃了这方面,因为我几乎肯定认证过程比使用这些库可以轻松实现更多。
但是,当我在使用WebBrowser已登录的当前浏览器中快速测试打开新选项卡时,我确实设法绕过了所需的标记化过程。传统上,WebBrowser不提供读取功能,这意味着即使页面可以打开,页面上的数据也无法读入pandas数据帧。这让我觉得我可以使用Win32com,打开一个浏览器,登录,然后运行其余的脚本,但是再次,没有一般的读取能力的Internet Explorer探测意味着我无法发送我想要的信息pandas 。我很难过。有任何想法吗?
我可以获得必要的身份验证令牌脚本,但我相信在这方面会发生任何事情之前需要一两个星期。我宁愿在等待公司的实际auth脚本的同时得到一些东西。
更新:我从公司收到了身份验证令牌,但是它需要在另一台我无法访问的服务器上使用python包,主要是因为我在我的部门使用Python很奇怪。因此,上述仍然适用 - 需要一种用于读取和操作打开的浏览器的方法。
答案 0 :(得分:9)
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")