微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有硒的登录和抓取

如何解决没有硒的登录和抓取

我正在尝试通过单个数据库(带有 MS Access 前端的 MysqL)监控我持有的各种投资。我已经为他们中的大多数采购了解决方案,因为无需登录门户即可获得单价/股价。我的问题是我的一项投资我只能通过登录才能找到价值。

我已经通过我的笔记本电脑使用 Selenium 完成了这项工作,但是我的树莓派完成了所有的收集工作,而 Selenium 在它上面很不稳定,并且在我进行更新等时不断损坏。

我希望有人能够指导我使用什么 python 模块在没有硒的情况下执行相同的操作。对于我的其他收获,我使用了 requests_html 和 urllib.request 的混合,因此稍微将它们作为偏好,但无法解决。也尝试过机械化,但没有成功。

我在网站上创建了一个测试帐户,并在代码中包含了这些详细信息,但是它不允许访问登录背后的内容,但我的问题是首先能够提交登录详细信息。

>
from selenium import webdriver
import time

browser = webdriver.Edge(r"C:\Python\edgedriver\msedgedriver.exe")
browser.get('https://app.raizinvest.com.au/login')

time.sleep(4)  
browser.find_element_by_name("email").send_keys("testaccountraiz@yahoo.com")
browser.find_element_by_name("password").send_keys("Test4321")
browser.find_element_by_xpath("/html/body/div/div/div[1]/div/div/div/form/div[4]/button").click()
time.sleep(3)
print(str(browser.find_elements_by_class_name("page-content__banner-account-value")[0].text))
browser.close()

解决方法

您的 selenium 代码不断中断,因为您正在像这样使用 xpath

/html/body/div/div/div[1]/div/div/div/form/div[4]/button -

您甚至可以在代码中引入 explicit waits 以获得更高的可靠性

Helium 就是这样一种工具,它比 selenium 先进一点,但有其自身的局限性,例如只能在 chrome 和 FF 以及 Python 本身中使用。

如果您对 Selenium Python 绑定感兴趣,我会按如下方式重新编写您的代码:

driver.maximize_window()
driver.get("https://app.raizinvest.com.au/login")
wait = WebDriverWait(driver,10)
wait.until(EC.element_to_be_clickable((By.NAME,"email"))).send_keys('testaccountraiz@yahoo.com')
wait.until(EC.element_to_be_clickable((By.NAME,"password"))).send_keys('Test4321')
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"button[type='submit']"))).click()

进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

Selenium - Python - Explicit waits

Python - Helium - Installation

Python - Helium - API's

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。