简体   繁体   English

Selenium:如何通过一个function获取find_element

[英]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.

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