[英]Selenium: How to get find_element through a function
i am trying to automatize login to a few webpages (Firefox) through python and selenium. When i try my code outside of a function it works fine but if i call it in a function it says我正在尝试通过 python 和 selenium 自动登录到几个网页 (Firefox)。当我在 function 之外尝试我的代码时它工作正常但是如果我在 function 中调用它它说
RemoteError@chrome://remote/content/shared/RemoteError.jsm:12:1 WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:192:5 NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.jsm:404:5 element.find/</<@chrome://remote/content/mari.nette/element.js:291:16 RemoteError@chrome://remote/content/shared/RemoteError.jsm:12:1 WebDriverError@chrome://remote/content/shared/webdriver/Errors.jsm:192:5 NoSuchElementError@chrome://remote/content/ shared/webdriver/Errors.jsm:404:5 element.find/</<@chrome://remote/content/mari.nette/element.js:291:16
the code itself looks like this代码本身看起来像这样
from selenium import webdriver from time import sleep from getpass import getpass from subprocess import Popen, PIPE from selenium.webdriver.common.by import By
webpages = dict(zip(['name','name2', 'name3'],['webpage','weboage2', 'werbpage3'])) usr='user@gmail.com'
def getuserbox(name):
if webpage == 'name':
foundelement = driver.find_element(By.ID,"mat-input-0")
if webpage == 'name2':
foundelement = driver.find_element(By.NAME, 'userId')
else:
foundelement = driver.find_element(By.NAME,'userid') return foundelement
def getpwdbox(webpage):
if webpage == 'name':
foundelement = driver.find_element(By.ID,"mat-input-1")
elif webpage == 'name2':
foundelement = driver.find_element(By.NAME,'password')
else:
foundelement = driver.find_element(By.ID,'password') return foundelement
for name, page in webpages.items():
driver = webdriver.Firefox()
driver.get(page)
print ("Opened page "+name+'/n'+page) sleep(2)
username_box = getuserbox(name)
print('found box and trying to send usr')
sleep(1)
username_box.send_keys(usr)
print ("Email Id entered")
sleep(1)
password_box = getpwdbox(name)
password_box.send_keys(pwd)
to get the user data into the page.将用户数据获取到页面中。 it works if done outside of the function.如果在 function 之外完成,它会起作用。
You need to pass the driver into each function:您需要将驱动程序传递到每个 function 中:
from selenium import webdriver
from time import sleep
from getpass import getpass
from subprocess import Popen, PIPE
from selenium.webdriver.common.by import By
webpages = dict(zip(['name', 'name2', 'name3'], ['webpage', 'weboage2', 'werbpage3']))
usr = 'user@gmail.com'
def getuserbox(webpage, driver):
if webpage == 'name':
foundelement = driver.find_element(By.ID, "mat-input-0")
if webpage == 'name2':
foundelement = driver.find_element(By.NAME, 'userId')
else:
foundelement = driver.find_element(By.NAME, 'userid')
return foundelement
def getpwdbox(webpage, driver):
if webpage == 'name':
foundelement = driver.find_element(By.ID, "mat-input-1")
elif webpage == 'name2':
foundelement = driver.find_element(By.NAME, 'password')
else:
foundelement = driver.find_element(By.ID, 'password')
return foundelement
for name, page in webpages.items():
driver = webdriver.Firefox()
driver.get(page)
print("Opened page " + name + '/n' + page)
sleep(2)
username_box = getuserbox(name, driver)
print('found box and trying to send usr')
sleep(1)
username_box.send_keys(usr)
print("Email Id entered")
sleep(1)
password_box = getpwdbox(name, driver)
password_box.send_keys(pwd)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.