简体   繁体   中英

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

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.

You need to pass the driver into each 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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM