调试时selenium正常,但是运行点击失败
Selenium is normal during debugging, but the run click fails
我已经搜索了几种解决方案,但都没有用。
这是我的代码
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)
我试过调试代码,它成功地 returns 了点击的页面。
当我 运行 代码时,它也 returns 成功,但是它不会 returns 单击的页面,只是源页面。
我尝试搜索解决方案,将页面拉到底部:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)",element)
但是结果一样,只是调试成功
谢谢
在访问页面源之前等待一小段时间等待页面加载
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)
看来,您的按钮发起了一个 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)
我已经搜索了几种解决方案,但都没有用。 这是我的代码
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)
我试过调试代码,它成功地 returns 了点击的页面。 当我 运行 代码时,它也 returns 成功,但是它不会 returns 单击的页面,只是源页面。
我尝试搜索解决方案,将页面拉到底部:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)",element)
但是结果一样,只是调试成功
谢谢
在访问页面源之前等待一小段时间等待页面加载
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)
看来,您的按钮发起了一个 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)