我试图从FOR循环调用函数但得到错误:
test()
NameError: name 'test' is not defined
代码如下:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
from lxml import html
import requests
import xlwt
browser = webdriver.Firefox() # Get local session of firefox
# 0 wait until the pages are loaded
browser.implicitly_wait(3) # 3 secs should be enough. if not, increase it
browser.get("http://ae.bizdirlib.com/taxonomy/term/1493") # Load page
links = browser.find_elements_by_css_selector("h2 > a")
for link in links:
link.send_keys(Keys.CONTROL + Keys.RETURN)
link.send_keys(Keys.CONTROL + Keys.PAGE_UP)
time.sleep(5)
test()
link.send_keys(Keys.CONTROL + 'w')
def test(self):#test function
elems = browser.find_elements_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span")
for elem in elems:
print elem.text
elem1 = browser.find_elements_by_css_selector("div.content.clearfix>div>fieldset>div>ul>li>a")
for elems21 in elem1:
print elems21.text
return 0
所以我想调用函数,当调用函数时,我希望将数据复制/粘贴到Excel中。
有人可以帮助我增强代码吗?
答案 0 :(得分:1)
您必须先创建function object
才能使用它。在你的情况下,你调用一个函数,但它尚未存在,因此没有定义。正如凯文所说,定义函数然后尝试调用它。
UPD:我无法添加评论,所以我在这里更新。 Mark Lutz在他的“学习Python”一书中详细描述了它,函数如何工作,def
做什么以及调用函数时会发生什么。但我认为任何其他Python书都会这样做。
UPD:写评论并不容易,所以我更新答案。
如上所述问题是您在调用函数后定义函数。例如,让我们假设我想编写一个写“玩得开心”+任何名字的程序。为简单起见,程序中给出了名称。 选项1:如果我按照你的意思编写程序1)调用函数2)定义一个函数我会得到一个完全像你得到的NameError。
程序:
greet = 'Have fun, '
print(greet + name('John')) # I call a function 'name'
def name(x): # I define a function
return str(x)
输出将是:
Traceback (most recent call last):
File "C:/Users/nikolay.dudaev/Documents/Private/deffun2.py", line 3, in <module>
print(greet + name('John'))
NameError: name 'name' is not defined
我需要做的就是更改函数定义的位置并调用函数:
greet = 'Have fun, '
def name(x): # I define a function
return str(x)
print(greet + name('John')) # I call a function 'name'
现在的输出是:
======= RESTART: C:/Users/nikolay.dudaev/Documents/Private/deffun2.py =======
Have fun, John
>>>
你走了!
复制def
之后的内容并将其粘贴到for
循环之前,它应该可以正常工作(虽然我没有尝试您的代码)。