我是 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)就不可能实现。
