【发布时间】:2018-01-12 15:39:07
【问题描述】:
我正在尝试定期从我组织的网站自主下载一些 CSV。他们太好了,不给我后端数据库访问或 API 的费用,所以我不得不拼凑一些东西来为我处理这个问题。该网站是一个 Oracle PeopleSoft 网站,在页面加载之前会以 Windows Security 模式提示。
我使用 Edge 是因为该网站似乎不喜欢 Firefox,而 Chrome 在 Selenium 中给我带来了麻烦。我过去能够以这种方式从 OBIEE 网站上抓取信息,但这给我带来了麻烦。下面的代码是我用来访问页面并尝试处理登录模式的代码。单步执行我的代码,我似乎根本没有越过driver.get(url) 行。
有人对如何处理这个问题有建议吗?
driver = webdriver.Edge(EdgeDriverManager().install())
driver.get(url)
# Wait till the modal prompts you to log in
wait(driver, 5).until(EC.alert_is_present())
alert = driver.switch_to_alert()
# Provide creds with a tab in between so that you change from username field to password field
alert.send_keys(config.myUSERNAME + Keys.TAB + config.myPASSWORD)
# click ok
alert.accept()
编辑:2018 年 1 月 25 日
尝试按照建议使用 Autoit,但我仍然遇到问题。 webdriver 在运行时似乎不允许发生任何其他事情。有关如何处理此问题的任何建议?
def browser(url):
driver = webdriver.Edge(EdgeDriverManager().install())
driver.get(url)
def login_handler(username, password):
print('This print never gets run? What is up with this?!')
# autoit.win_wait_active("Credential Dialog Xaml Host")
autoit.win_exists("Windows Security", "CORP\\")
# also tried this
# autoit.win_wait_active("Windows Security")
autoit.send(username)
autoit.send("{TAB}")
autoit.send(password)
autoit.send("{ENTER}")
t1 = Thread(target=browser(url))
t2 = Thread(target=login_handler(config.myUSERNAME, config.myPASSWORD))
t2.start()
t1.start()
【问题讨论】:
-
Windows 对话框不会被 Selenium 自动化。您可以尝试类似 autoit 或机器人框架。
-
我正在尝试使用 Autoit 来处理这个问题,但我不知道如何让 Python 让我使用 webdriver 进行多线程处理。我曾尝试使用 Thread() 但它一直挂在 driver.get() 调用上,即使它假设与我的 Autoit 代码位于单独的线程中。
标签: python-3.x selenium web-scraping