2016-02-16 45 views
0

如何在加載時打印頁面?加載硒時打印頁面

在這樣做時print driver.page_source.encode('utf-8')好像輸出的第一頁,而不是搜索結果

import sys 
import time 
import getopt 
from pyvirtualdisplay import Display 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 

def start_display(): 
    display = Display(visible=0, size=(800, 600)) 
    display.start() 
    return display 

def init_driver(): 
    driver = webdriver.Firefox() 
    driver.wait = WebDriverWait(driver, 5) 
    return driver 

def lookup(driver, argv): 
    driver.get('http://www.google.dk') 

    query = '' 

    opts, args = getopt.getopt(argv, 'hg:d', ['query=']) 
    for opt, arg in opts: 
     if opt == '--query': 
      query = arg 

    try: 
     box = driver.wait.until(EC.presence_of_element_located(
      (By.NAME, 'q'))) 
     box.send_keys(query) 
     button = driver.wait.until(EC.element_to_be_clickable(
      (By.NAME, 'btnG'))) 
     button.click() 
     print driver.page_source.encode('utf-8') 

    except TimeoutException: 
     print>>sys.stderr, 'Box or Button not found in google.com' 

if __name__ == '__main__': 
    display = start_display() 
    driver = init_driver() 
    lookup(driver, sys.argv[1:]) 
    time.sleep(5) 

    driver.quit() 
    display.stop() 

回答

1

您需要點擊搜索按鈕btnG後添加等待否則它不會等待XHR請求完成

try: 
    box = driver.wait.until(EC.presence_of_element_located(
     (By.NAME, 'q'))) 
    box.send_keys(query) 
    button = driver.wait.until(EC.element_to_be_clickable(
     (By.NAME, 'btnG'))) 
    button.click() 

    driver.wait.until(EC.presence_of_element_located(
      (By.ID, 'resultStats'))) 

    print driver.page_source.encode('utf-8') 
1

如果pageLoaded後您的應用程序更新內容,你必須打印頁面主體,而不是page_source的。

見下面的代碼:

try: 
    box = driver.wait.until(EC.presence_of_element_located(
     (By.NAME, 'q'))) 
    box.send_keys(query) 
    button = driver.wait.until(EC.element_to_be_clickable(
     (By.NAME, 'btnG'))) 
    button.click() 
    time.sleep(10) 
    print driver.find_element_by_tag_name("body").get_attribute("innerHTML").encode('utf-8') 

except TimeoutException: 
    print>>sys.stderr, 'Box or Button not found in google.com'