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()
答案 0 :(得分:3)
这是一个简单的代码,只需打开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)
看输出: 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!")
输出:结果:52195
参考:
https://stackoverflow.com/a/26567563/7642415
http://selenium-python.readthedocs.io/locating-elements.html
等一下!因为单个元素是动态加载的,所以即使这样也无法保证获取整页源代码。如果浏览器找到它继续运行的元素。因此,请确保找到正确的元素以确保页面已完全加载。
P.S Mine是Python3& webdriver在我的环境PATH中。所以我的代码需要稍微修改一下才能使它适用于Python 2.x版本。我想只需要修改打印语句。