【发布时间】:2019-07-19 12:59:13
【问题描述】:
我正在尝试编写脚本来自动化下载 Instagram 故事的过程,但尝试登录时我已经失败了。
我正在Pycharm 中编写代码。我只是尝试了解决任何问题的常用方法。首先,通过在控制台中输入命令来解决它,如果它可以在脚本中编写在控制台中工作的命令。但这是问题所在。在 python 控制台 中运行良好的函数在脚本中失败。
我注意到我的selenium 已过时,但升级它并没有帮助以太。我还做了一个新项目来测试天气有什么不同,但它没有。
我还尝试跳过脚本中的第一步,只打开我被重定向到的 url。但是第二个命令也失败了。
当我创建一个新变量来存储driver.find_element_by_link_text() 的输出时,它返回一个空列表。这让我相信 selenium 无法搜索页面的内容。
我也在 Chrome 和 Safari 上尝试过相同的方法。这也没有用。
代码如下:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("https://instagram.com/")
#next command fails
driver.find_element_by_link_text("Melde dich an.").click()
#if the first command is skipped by entering in the url
#in driver.get(https://www.instagram.com/accounts/login/?source=auth_switcher)
#the following command fails as well.
driver.find_element_by_name("username").send_keys("HereIsTheUsername")
driver.find_element_by_name("password").send_keys("HereIsThePassword")
driver.find_element_by_name("password").send_keys(Keys.RETURN)
driver.close()
在控制台中,这些命令如前所述, 这是我在控制台中输入的内容:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("https://instagram.com/")
driver.find_element_by_link_text("Melde dich an.").click()
#if it failed here would be an error message
element = driver.find_element_by_name("username")
使用脚本,错误消息是这样的:
Traceback(最近一次调用最后一次):文件 "/Users/alisot2000/PycharmProjects/Instagram 下载器/venv/Main.py", 第 6 行,在 driver.find_element_by_link_text("Melde dich an.").click() 文件 "/Users/alisot2000/PycharmProjects/Instagram 下载器/venv/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", 第 428 行,在 find_element_by_link_text 中 返回 self.find_element(by=By.LINK_TEXT, value=link_text) 文件“/Users/alisot2000/PycharmProjects/Instagram 下载器/venv/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", 第 978 行,在 find_element 中 'value': value})['value'] 文件“/Users/alisot2000/PycharmProjects/Instagram 下载器/venv/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", 第 321 行,在执行中 self.error_handler.check_response(response) 文件“/Users/aliot2000/PycharmProjects/Instagram 下载器/venv/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", 第 242 行,在 check_response 中 引发异常类(消息,屏幕,堆栈跟踪) selenium.common.exceptions.NoSuchElementException:消息:无法 定位元素:Melde dich an。
【问题讨论】:
-
您如何确定控制台找到了该元素?你用它来验证了吗?
-
从上一条错误消息中可以清楚地看出脚本没有找到该元素。它通常发生在不能直接使用
selenium的网站。 -
对我来说似乎是一个同步问题。在尝试查找用户名元素之前添加显式等待。