NameError:name' driver'没有定义

时间:2016-08-06 05:34:10

标签: python python-3.x multiprocessing

我使用上面的代码从Facebook UID抓取好友列表并收到错误:

  File "C:\Users\Tn\PycharmProjects\untitled\test\1.py", line 15, in friend_uid_list
    soup = from_uid(uid)
  File "C:\Users\Tn\PycharmProjects\untitled\test\1.py", line 11, in from_uid
    driver.get('https://www.facebook.com/' + uid + '/friends')
NameError: name 'driver' is not defined
"""

你能告诉我如何解决它吗?非常感谢你 !下面的代码是我的代码

import multiprocessing
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By

def from_uid(uid):
    driver.get('https://www.facebook.com/' + uid + '/friends')
    return BeautifulSoup(driver.page_source, "html5lib")

def friend_uid_list(uid):
    soup = from_uid(uid)
    friends = soup.find_all("div", class_="fsl fwb fcb")
    target = open('C:/friend_uid_list.txt', 'a')
    for href in friends:
        href = href.find('a')
        try:
            target.write(href + "\n")
        except:
            pass
    target.close()

if __name__ == '__main__':

    driver = webdriver.Firefox()
    driver.get("https://www.facebook.com/")
    driver.find_element_by_css_selector("#email").send_keys("myemail@gmail.com")
    driver.find_element_by_css_selector("#pass").send_keys("mypass")
    driver.find_element_by_css_selector("#u_0_m").click()

    pool = multiprocessing.Pool(3)
    pool.map(friend_uid_list, [100004159542140,100004159542140,100004159542140])

1 个答案:

答案 0 :(得分:0)

原因很简单:您创建了一些新流程,并且无法在另一个流程(主流程)中查看变量。

有几种解决方案:

  1. 将您需要的变量作为参数传递。但这是不可能的,因为driver不可挑选。

  2. 为每个流程创建一个新驱动程序。

  3. 使用多线程而不是多重处理。但是,我不确定硒是否以这种方式起作用,你必须自己进行测试。