Selenium:如何通过函数获取find_element

roqulrg3  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在尝试通过python和selenium自动登录一些网页(Firefox)。当我在函数之外尝试我的代码时,它工作正常,但如果我在函数中调用它,它会说
jsm:192:5没有这样的元素错误@chrome://remote/content/shared/webdriver/错误。jsm:404:5元素。查找/〈/〈@chrome://remote/content/marionette/元素。js:291:16
代码本身如下所示

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)

以将用户数据放入页面。如果在函数外部完成,则可以工作。

zfycwa2u

zfycwa2u1#

您需要将驱动程序传递到每个函数中:

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)

相关问题