Wol*_*Ves 11 python authentication web-scraping
我正在努力在python中找到一个方法,它允许你在当前使用的Web浏览器中读取数据.实际上,我正在尝试在本地控制的公司网页上下载大量数据框,并将其实施到数据框中.问题是该网站有一个相当复杂的身份验证令牌进程,我无法使用各种用户参数使用大量的webdrivers,Requests,urllib和cookielib来绕过Selenium.我完全放弃了这个方面,因为我几乎肯定认证过程比使用这些库容易实现的更多.
但是,当我在使用WebBrowser登录的当前浏览器中快速测试打开新选项卡时,我确实设法绕过了所需的标记化过程.传统上,WebBrowser不提供读取功能,这意味着即使页面可以打开,页面上的数据也无法读入pandas数据帧.这让我觉得我可以使用Win32com,打开一个浏览器,登录,然后运行其余的脚本,但是再次,没有一般的读取能力的Internet Explorer探测意味着我无法发送我想要的信息pandas .我很难过.有任何想法吗?
我可以获得必要的身份验证令牌脚本,但我确信在这方面发生任何事情之前需要一到两周的时间.我宁愿在等待公司的实际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.
Run Code Online (Sandbox Code Playgroud)
如果您使用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")
Run Code Online (Sandbox Code Playgroud)