用python在selenium和phantomjs中显式等待

时间:2017-07-28 18:51:47

标签: python selenium xpath phantomjs lxml

我试图从这个site以及许多其他"葡萄酒"中删除一些数据。在这个网站上,我使用selenium作为JS网站。但是,我发现我的代码有时只能起作用,有时候即使没有任何变化也不会返回任何值。

我认为我应该使用selenium明确等待来克服这一挑战,但是我不确定如何整合它们,所以任何有关这样做的指导都会有所帮助!

我的代码是

def ct_content(url):
    browser = webdriver.PhantomJS()
    browser.get(url)
    wait = WebDriverWait(driver, 10)
    html = browser.page_source
    html = lxml.html.fromstring(html)
    try:
        content = html.xpath('//a[starts-with(@href, "list.asp?Table=List")]/text()')
        browser.quit()
        return content
    except:
        browser.quit()
        return False

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试使用更具体的XPath

//ul[@class="twin_set_list"]//a/text()

此外,无需使用lxml。只需尝试:

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

data = [link.get_attribute('textContent') for link in wait(browser, 10).until(EC.presence_of_all_elements_located((By.XPATH, '//ul[@class="twin_set_list"]//a')))]

答案 1 :(得分:0)

看起来你从未真正使用过隐式等待。这就是我用明确的等待编写脚本的方式。

def ct_content(url):
    browser = webdriver.PhantomJS()
    browser.get(url)
    wait = WebDriverWait(browser, 10)
    try:
        content = wait.until(EC.element_to_be_clicable((By.XPATH, '//a[starts-with(@href, "list.asp?Table=List")]')))
        browser.quit()
        return content.text
    except:
        browser.quit()
        return False

此外,设置隐式等待的方法是:

browser.implicitly_wait(10) # seconds