单独文件中的 Python Selenium 函数 - NameError



我正在构建一个Python脚本,并希望将某些函数拆分为单独的文件以使维护更容易。

我目前有两个文件称为 main.py 和 function1.py

main.pydef

#Setup Imports
import os
import os.path
import sys

# Import Functions
from function1 import myfunction

#Setup Selenium
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium import webdriver

#Launch Firefox
def init_driver():
    driver = webdriver.Firefox()
    return driver   
  url_list = ['http://www.example.com/page1', 'http://www.example.com/contact', 'http://www.example.com/about', 'http://www.example.com/test'];
driver = init_driver()
# Init Blank List
checked_urls = []
for url in url_list:
    myfunction(driver)
print(checked_urls)

function1.py

def myfunction(driver):
    driver.get(url)
    htmlText = driver.find_element_by_css_selector("#phrase").text
    if "This Is My Phrase" in htmlText:
        checked_urls.extend(['PHRASE_FOUND'])
    else:
        checked_urls.extend(['PHRASE_FOUND'])

我正在尝试让它访问列表中的每个 URL 并检查页面上的"这是我的短语"。 如果找到它,那么它应该添加到列表中。

我在运行脚本时看到以下错误...

NameError: name 'url' is not defined

我很确定这与我导入单独功能的方式有关,但无法找出问题所在,有人可以帮忙吗?

你还必须将 url 变量传递给 myfunction:

def myfunction(driver, url):
    driver.get(url)
    htmlText = driver.find_element_by_css_selector("#phrase").text
    if "This Is My Phrase" in htmlText:
        checked_urls.extend(['PHRASE_FOUND'])
    else:
        checked_urls.extend(['PHRASE_FOUND'])

然后在主文件中:

for url in url_list:
    myfunction(driver, url)

我认为应该更正一些代码:

首先,删除url_list之前的空格:

  #url_list = ['http://www.example.com/page1', 'http://www.example.com/contact', 'http://www.example.com/about', 'http://www.example.com/test'];
url_list = ['http://www.example.com/page1', 'http://www.example.com/contact', 'http://www.example.com/about', 'http://www.example.com/test'];

然后,url是一个局部变量,它不能在函数myfunction中直接访问。但它可以作为函数参数访问:

def myfunction(driver, url):
    ...

最新更新