调试期间Selenium正常,但运行点击失败

时间:2018-02-05 07:27:46

标签: python selenium phantomjs

我搜索了几个解决方案,但它没有用。 那是我的代码

driver = webdriver.PhantomJS()
driver.get('https://baijia.baidu.com')
wait = WebDriverWait(driver,10)
wait.until(EC.element_to_be_clickable((By.ID, 'getMoreArticles'))).click()
content = driver.page_source
page = open('test.html','wb')
page.write(content)

我尝试调试代码,它成功返回点击的页面。 当我运行代码时,它也会成功返回,但它不会返回被点击的页面,只返回源页面。

我尝试搜索解决方案,将页面缩小到底部:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight)",element)

但结果相同,只能成功调试。

由于

2 个答案:

答案 0 :(得分:0)

在访问页面源之前等待一小段时间等待页面加载

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Firefox()
driver.get('https://baijia.baidu.com')
wait = WebDriverWait(driver,10)
wait.until(EC.element_to_be_clickable((By.ID, 'getMoreArticles'))).click()
time.sleep(4)
content = driver.page_source
page = open('test3.html','w')
page.write(content)

答案 1 :(得分:0)

看来,您的按钮会启动AJAX请求。驱动程序没有等待它完成,因为没有页面重新加载。所以你应该添加明确的等待。这样的事情:

expected_number_of_articles = 10 # enter your number
article_locator = (By.CSS_SELECTOR, 'div#article') # enter your locator
wait.until(lambda driver: len(driver.find_elements(*article_locator)) >= expected_number_of_articles)