【发布时间】:2020-09-21 20:13:02
【问题描述】:
我正在尝试通过 python 创建一个利用 Selenium 的网络爬虫。我必须登录网站并尝试使用两个环境变量,而不是将我的凭据硬编码到脚本中。但是,当我尝试这样做时,会收到如下错误:
Traceback (most recent call last):
File "/Users/KAR/Desktop/Web Scraping /Clicky2.py", line 28, in <module>
username_box.send_keys(USERNAME)
File "/Users/KAR/opt/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 478, in send_keys
{'text': "".join(keys_to_typing(value)),
File "/Users/KAR/opt/anaconda3/lib/python3.7/site-packages/selenium/webdriver/common/utils.py", line 150, in keys_to_typing
for i in range(len(val)):
TypeError: object of type 'NoneType' has no len()
至于我的代码:当凭据被硬编码时,提供的代码可以工作,但我希望有环境变量。
尽可能具体 - 问题是当我使用环境变量尝试使用 Selenium 登录时,我收到如上所示的错误。
如果有人可以帮助我,将不胜感激!
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep
import requests
import os
#path to chromedriver
DRIVER_PATH = '/usr/local/bin/chromedriver'
#environment variables credentials for Clicky
#USERNAME = os.getenv('USERNAME')
USERNAME = 'user'
#PASSWORD = os.environ.get('PASSWORD')
PASSWORD = 'password'
#allows me to put Selenium in headless mode or without running GUI
options = Options()
options.headless = True
#opens Chrome, goes to Clicky login
driver = webdriver.Chrome(options=options, executable_path=DRIVER_PATH)
driver.maximize_window()
driver.implicitly_wait(20)
driver.get('https://clicky.com/user/login')
print(driver.current_url)
print('Clicky is opened')
sleep(1)
username_box = driver.find_element_by_name("username")
username_box.clear()
username_box.send_keys(USERNAME)
sleep(1)
password_box = driver.find_element_by_name("password")
password_box.clear()
password_box.send_keys(PASSWORD)
sleep(1)
login_button = driver.find_element_by_name("submit_button")
login_button.click()
print(driver.current_url)
driver.quit()
【问题讨论】:
-
你是如何设置环境变量的?
-
如果您尝试打印环境变量会发生什么?他们可能没有正确设置。另外,就个人而言,如果我使用 PyCharm 或类似的东西,当我更新环境变量时,它们不会被 PyCharm 捕获,除非我关闭并重新打开它。
-
打印它们后,它们都返回“无”。我在单独的 python 文件中设置了凭据。我导入了 os 并引用 getenv 和 environ.get 方法来调用它们。当我使用请求网络抓取时,我做了类似的方法并且它有效。不确定如何为 selenium 而不是为 request 设置它们之间的差异是什么
-
我也在使用 Visual Studio Code
-
你还没有说你是如何设置环境变量的。
标签: python selenium environment-variables typeerror