为什么python selenium获取空的page_source?

时间:2017-10-01 14:44:52

标签: python selenium

我尝试在下面的链接上模拟购买项目操作。 (首先需要登录)

taobao_item_link

点击下面的按钮后。

img_link: img

该链接将跳转到new link

但是如果我现在打印出page_source,我将获得空值。

为什么会这样?

当然,任何元素位置都会导致:

selenium.common.exceptions.NoSuchElementException

我在谷歌上搜索,我知道这不是由于页面卸载造成的。

为什么会发生这种情况以及如何解决?

这是我使用的代码。 帐户名称和代码位于cfg文件中。

int H1 = Convert.ToInt16(???);

cfg文件是这样的:

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import os
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys  #需要引入keys包
chromedriver = "chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver

d = {}
with open("cfg.ini", encoding = 'utf-8') as f:
    for line in f:
       (key, val) = line.split()
       d[key] = val

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
driver = webdriver.Chrome(chrome_options=options)

driver.maximize_window()
driver.get('https://login.taobao.com/member/login.jhtml')
time.sleep(2)
driver.find_element_by_id('J_Quick2Static').click()
driver.find_element_by_id("TPL_username_1").clear()
driver.find_element_by_id("TPL_username_1").send_keys(d['accountname'])

driver.find_element_by_id("TPL_username_1").send_keys(Keys.TAB)
time.sleep(1)
driver.find_element_by_name("TPL_password").send_keys(d['code'])

driver.find_element_by_css_selector('#J_SubmitStatic').click()

print('-' * 20)
print(d['phone'])
driver.get(d['itemurl'])

element=WebDriverWait(driver,60).until(lambda driver :
driver.find_element_by_css_selector('#J_LinkBuy'))

# with open('res1.html', 'a') as the_file:
   # the_file.write(driver.page_source)
element.click()

element=WebDriverWait(driver,60).until(lambda driver :
driver.find_element_by_css_selector('#J_phone'))

driver.find_element_by_id('J_phone').click()

print('here is the page')
print(driver.page_source)

1 个答案:

答案 0 :(得分:1)

您必须切换到新窗口才能使其正常工作:

driver.find_element_by_id('J_phone').click()

driver.switch_to.window(driver.window_handles[1])

print('here is the page')
print(driver.page_source)

通过这种方式,您可以告诉Selenium必须使用哪个窗口。