网络元素未在FOR LOOP中的硒中检测到

时间:2015-10-05 08:06:45

标签: python excel python-2.7 selenium selenium-webdriver

我正在尝试从特定的网络元素中获取一些信息。问题是,当我尝试在没有for循环的情况下获取信息时,程序就像魅力一样。但同样当我把它放在for循环中并尝试它不会检测循环中的web元素。这是我一直在尝试的代码:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
from lxml import html
import requests
import xlwt



browser = webdriver.Firefox() # Get local session of firefox

# 0 wait until the pages are loaded
browser.implicitly_wait(3) # 3 secs should be enough. if not, increase it

browser.get("http://ae.bizdirlib.com/taxonomy/term/1493") # Load page
links = browser.find_elements_by_css_selector("h2 > a")

def test():#test function
    elems = browser.find_elements_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span")
    print elems
    for elem in elems:
        print elem.text
    elem1 = browser.find_elements_by_css_selector("div.content.clearfix>div>fieldset>div>ul>li>a")
    for elems21 in elem1:
        print elems21.text
        return 0


for link in links:
    link.send_keys(Keys.CONTROL + Keys.RETURN)
    link.send_keys(Keys.CONTROL + Keys.PAGE_UP)
    time.sleep(5)
    test() # Want to call test function    
    link.send_keys(Keys.CONTROL + 'w')

当我打印对象时,我得到的输出是一个空数组作为输出[]。有人可以帮助我加强它。新手到硒。

在上一个问题中,我曾询问有关打印的问题。但问题在于,自我是元素本身不能检测到的。这种方式问题完全不同。

1 个答案:

答案 0 :(得分:2)

我无法打开页面,但据我所知,您希望按顺序打开链接并执行某些操作。使用link.send_keys(Keys.CONTROL + 'w'),您将关闭新打开的标签页,以便在新标签页中打开链接。在这种情况下必须切换到新窗口,以便您可以在新窗口中访问该元素。您可以按driver.window_handles查询窗口并按driver.switch_to_window(driver.window_handles[-1])切换到上一个窗口,关闭窗口后,您必须切换回driver.switch_to_window(driver.window_handles[0])

的第一个窗口
for link in links:
    link.send_keys(Keys.CONTROL + Keys.RETURN)

    # switch to new window
    driver.switch_to_window(driver.window_handles[-1])

    link.send_keys(Keys.CONTROL + Keys.PAGE_UP) # dont know why
    time.sleep(5)
    test() # Want to call test function    
    link.send_keys(Keys.CONTROL + 'w')

    #switch back to the first window
    driver.switch_to_window(driver.window_handles[0])