【问题标题】:Environment Variables - Selenium - Python环境变量 - Selenium - Python
【发布时间】: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


【解决方案1】:

您可以在 .env 文件中设置环境变量并使用 pytest 插件 pytest-dotenv。

https://pypi.org/project/pytest-dotenv/

顺便说一句,您还可以将浏览器驱动程序安装在本地计算机上,这样就无需在脚本中定义驱动程序的路径。示例:brew install --cask chromedriver。如果您在 CI 系统中运行这些,还有其他解决方案。

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 2016-05-07
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多