Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
环境变量-Selenium-Python_Python_Selenium_Environment Variables_Typeerror - Fatal编程技术网

环境变量-Selenium-Python

环境变量-Selenium-Python,python,selenium,environment-variables,typeerror,Python,Selenium,Environment Variables,Typeerror,我正试图通过python创建一个利用Selenium的web爬虫程序。我必须登录到一个网站,并尝试使用两个环境变量,而不是硬编码到脚本我的凭据。但是,当我尝试这样做时,会出现如下错误: Traceback (most recent call last): File "/Users/KAR/Desktop/Web Scraping /Clicky2.py", line 28, in <module> username_box.send_keys(USER

我正试图通过python创建一个利用Selenium的web爬虫程序。我必须登录到一个网站,并尝试使用两个环境变量,而不是硬编码到脚本我的凭据。但是,当我尝试这样做时,会出现如下错误:

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()

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


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

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


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

如何设置环境变量?如果尝试打印环境变量,会发生什么情况?它们可能没有正确设置。另外,就个人而言,如果我使用PyCharm或类似的东西,当我更新环境变量时,它们不会被PyCharm捕获,除非我关闭并重新打开它。在打印它们之后,它们都返回“无”。我在单独的python文件中设置了凭据。我导入os并引用getenv和environ.get方法来调用它们。当我使用RequesttoWebScrape时,我也使用了类似的方法,而且效果很好。不确定您将如何为selenium而不是Request设置它们之间存在什么差异我也在使用Visual Studio代码您仍然没有说明如何设置环境变量。您如何设置环境变量?如果您尝试打印环境变量会发生什么情况?它们可能没有正确设置。另外,就个人而言,如果我使用PyCharm或类似的东西,当我更新环境变量时,它们不会被PyCharm捕获,除非我关闭并重新打开它。在打印它们之后,它们都返回“无”。我在单独的python文件中设置了凭据。我导入os并引用getenv和environ.get方法来调用它们。当我使用RequesttoWebScrape时,我也使用了类似的方法,而且效果很好。不确定您将如何为selenium而不是Request设置它们之间存在什么差异我也在使用Visual Studio代码您还没有说明如何设置环境变量。
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()