Reputation: 27689
How to print a page when loaded?
When doing this print driver.page_source.encode('utf-8')
it seems like the output is the first page and not the search results
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()
Upvotes: 0
Views: 604
Reputation: 1342
You need to add a wait after clicking the search button btnG
otherwise it won't wait for the XHR request to finish
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')
Upvotes: 1
Reputation: 5137
If your application update content after pageLoaded, you have to print page body instead of page_source.
See code below:
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'
Upvotes: 1