Python:如何使用Selenium打印所有源代码

时间:2017-09-02 04:12:53

标签: 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()

1 个答案:

答案 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版本。我想只需要修改打印语句。