Skip to main content
 首页 » 编程设计

python之在参数中传递 Selenium Webdriver。在 Python 中有可能吗

2024年08月22日52zengkefu

我是 Python 新手。

我的脚本的目的是使用 Selenium Webdriver 解析网页。有两个子任务。我完成的第一个任务没有错误。但是所有脚本都没有任何功能。

现在我正在尝试以稍微复杂的方式解决第二个任务。我想使用函数。

问题是:

我可以在函数参数中传递一个事件的 Selenium Webdriver 吗?

第二个问题是:

如果答案是肯定的 - 第二个函数是否也可以将事件的 Webdriver 传递给另一个函数?

所以我考虑激活一个 Webdriver 并将其传递给函数而不关闭 session 。

我的代码是:

for key, value in enumerate(headers): 
    webdriver.DesiredCapabilities.PHANTOMJS[ 
        'phantomjs.page.customHeaders.{}'.format(key)] = value 
 
w = webdriver.PhantomJS() 
 
ps = q_yn('Perform new links parsing?', default='no') 
 
if ps: 
    csv_l = get_clist(w) 
 
<...> 
 
def get_clist(w): 
    w.get(url) 
    wait_pageload(w, 0) 
    src = w.page_source 
    BeautifulSoup(src, "lxml") 
    ... (etc) 
 
<..> 
 
def wait_pageload(w, pt): 
    if pt == 0: 
        element = WebDriverWait(w, 10).until( 
            EC.presence_of_element_located((By.CLASS_NAME, "serg_search_result"))) 
    elif pt == 1: 
        element = WebDriverWait(w, 10).until( 
            EC.presence_of_element_located((By.ID, "ya_share"))) 
    else: 
        raise ValueError("Page type: %s is unknown" % pt) 

当我尝试构建和运行此脚本时,我看到一个错误:

File "fts-crawl2.py", line 108, in wait_pageload 
EC.presence_of_element_located((By.CLASS_NAME, "serg_s"))) 
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/support/ 
  wait.py", line 71, in until 
  value = method(self._driver) 
 
selenium.common.exceptions.WebDriverException: Message: Error - Unable 
to load Atom 'find_element' from file ':/ghostdriver/./third_party/webdriver- 
atoms/find_element.js' 

请您参考如下方法:

是的,您可以将 WebDriver 作为参数传递给任何 function 或 method。你的第二个问题的答案也是肯定的。如果您想这样做,可以在整个应用程序中共享一个 WebDriver。 如果这做不到,一个非常流行的设计模式(Page Object)就不可能实现。