Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
Python 3.x Selenium Python-输入用户名和密码的更紧凑或更具Python风格的方式?_Python 3.x_Selenium_Selenium Webdriver_Webdriverwait_Expected Condition - Fatal编程技术网

Python 3.x Selenium Python-输入用户名和密码的更紧凑或更具Python风格的方式?

Python 3.x Selenium Python-输入用户名和密码的更紧凑或更具Python风格的方式?,python-3.x,selenium,selenium-webdriver,webdriverwait,expected-condition,Python 3.x,Selenium,Selenium Webdriver,Webdriverwait,Expected Condition,我需要登录一个网站,我已经有了以下代码,可以正常工作: username = driver.find_element_by_name('uname') password = driver.find_element_by_name('password') username.send_keys('username'), password.send_keys('password', Keys.RETURN) 现在,用户名和密码是硬编码到程序中的,但出于安全原因,我最终会要求用户同时提供这两个密码。有

我需要登录一个网站,我已经有了以下代码,可以正常工作:

username = driver.find_element_by_name('uname')
password = driver.find_element_by_name('password')
username.send_keys('username'), password.send_keys('password', Keys.RETURN)

现在,用户名和密码是硬编码到程序中的,但出于安全原因,我最终会要求用户同时提供这两个密码。有没有办法让我写的东西更紧凑或更通俗?为了我自己的利益,我正在尽可能地接近PEP8。

除非出现运行时错误,否则您的程序完全是Pythonic的

话虽如此,从观点来看,有以下几个问题:

driver.get(url)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "'uname'"))).send_keys('username')
driver.find_element_by_name('password').send_keys('password')
driver.find_element_by_css_selector('cssSelector').click()
# incase the elements are with in a <form>
driver.find_element_by_css_selector('cssSelector').submit()
  • 您可能会在调用
    get()
    后开始查找用户名。因此,理想情况下,您必须使
    元素成为可点击的()
    ,然后按如下方式调用
    send\u keys()

    driver.get(url)
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "'uname'"))).send_keys('username')
    driver.find_element_by_name('password').send_keys('password')
    
    driver.find_element_by_css_selector('cssSelector').click()
    # incase the elements are with in a <form>
    driver.find_element_by_css_selector('cssSelector').submit()
    
  • 此外,我建议避免尝试
    发送密钥(keys.RETURN)
    ,除非您没有其他选择。理想情况下,您应该在登录或登录按钮上调用
    click()
    ,如下所示:

    driver.get(url)
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, "'uname'"))).send_keys('username')
    driver.find_element_by_name('password').send_keys('password')
    
    driver.find_element_by_css_selector('cssSelector').click()
    # incase the elements are with in a <form>
    driver.find_element_by_css_selector('cssSelector').submit()
    
    驱动程序。通过_css_选择器('cssSelector')查找_元素。单击()
    #如果元素在一个
    driver.find_element_by_css_selector('cssSelector')。submit()
    

我喜欢在获取username元素之前使用WebDriverWait的想法,但是查找登录按钮与仅使用键的原因是什么。返回?通过这个项目,我仍然学到了很多关于Python的知识,这是一个相当吓人的项目,因为我这样做是为了我的工作,尽管这根本不是我被聘用的目的。但我这样做会提高我的工作效率和同事的工作效率。@Auske我没听清你的问题,你能再来吗?是在
WebDriverWait
还是
键上。Return
?对不起,我是问为什么不直接使用
键。Return
?@Auske一个主要原因是
登录
登录
按钮可以启用Javascript,甚至可以有onclick事件,只有调用
单击()
。我只是尝试在我的代码中使用
WebDriverWait
,但我无法让它工作。试图找到该元素将超时。但我还是继续更改了
键。返回
。下面是我的新行:
print('Finding username和password并发送两者')
驱动程序。按名称('uname')查找元素。按用户名('send'keys)发送元素。
驱动程序。按名称('password')查找元素。按名称('bttn')查找元素。单击()
打印('Logging in')