Avo*_*yan 1 python selenium selenium-webdriver
driver.page_source不要返回所有的源代码。它只是详细地打印了部分代码,但它遗漏了大部分代码。我怎样才能解决这个问题?
这是我的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
def htmlToLuna():
url ='https://codefights.com/tournaments/Xph7eTJQssbXjDLzP/A'
driver = webdriver.Chrome('C:\\Python27\\chromedriver\\chromedriver.exe')
driver.get(url)
web=open('web.txt','w')
web.write(driver.page_source)
print driver.page_source
web.close()
print htmlToLuna()
Run Code Online (Sandbox Code Playgroud)
这是一个简单的代码,它所做的就是打开url并获取长度页面源并等待五秒钟,然后再次获取页面源的长度。
if __name__=="__main__":
browser = webdriver.Chrome()
browser.get("https://codefights.com/tournaments/Xph7eTJQssbXjDLzP/A")
initial = len(browser.page_source)
print(initial)
time.sleep(5)
new_source = browser.page_source
print(len(new_source)
Run Code Online (Sandbox Code Playgroud)
查看输出:15722 48800
你看到页面源的长度在等待后增加了吗?在获取源之前,您必须确保页面已完全加载。但这不是一个正确的实现,因为它盲目地等待。
这是一个很好的方法,浏览器将等待直到找到您选择的元素。超时设置为 10 秒。
if __name__=="__main__":
browser = webdriver.Chrome()
browser.get("https://codefights.com/tournaments/Xph7eTJQssbXjDLzP/A")
try:
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.CodeMirror > div:nth-child(1) > textarea:nth-child(1)'))) # 10 seconds delay
print("Result:")
print(len(browser.page_source))
except TimeoutException:
print("Your exception message here!")
Run Code Online (Sandbox Code Playgroud)
输出:结果:52195
参考:
http://selenium-python.readthedocs.io/locating-elements.html
坚持,稍等!即使这样也不能保证获得完整的页面源,因为单个元素是动态加载的。如果浏览器找到它继续移动的元素。因此,请确保找到正确的元素以确保页面已完全加载。
PS 我的是 Python3 & webdriver 在我的环境路径中。所以我的代码需要稍微修改一下,使其适用于 Python 2.x 版本。我想只需要修改打印语句。
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |