首页 文章

从下拉菜单中逐个读取页面 - 无法在第2页上找到下拉菜单

提问于
浏览
1

我有page .

我想从页面顶部开始与下拉菜单中的元素相关联的每个页面(以获取URL) .

新的硒,我正在尝试一些初步的工作:

  • 打开驱动程序

  • 将其发送到网页

  • 选择下拉菜单

  • 只需从任意值= 2中选择随机"name"

  • 进入页面并从中获取URL . 打印出来 .

  • 只需从任意值= 3 ERROR中选择随机"name" .

我使用的代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time

driver = webdriver.Firefox()
driver.get("http://www.hillsproducts.com/General.aspx/en-GB/PD/a-d-canine/original/can")
select = Select(driver.find_element_by_xpath("//select[@id='productSpecifier_product']"))
value="2"
select.select_by_value(value)
print(driver.current_url)
time.sleep(10)
value="3"
select.select_by_value(value)
print(driver.current_url)

有一些我没有得到的东西 . 我得到的错误如下:

Traceback(最近一次调用最后一次):文件“/Users/Luigi/Desktop/selenium_attempt.py”,第19行,在select.select_by_value(value)文件中“/Library/Frameworks/Python.framework/Versions/3.4/lib/ python3.4 / site-packages / selenium-2.46.1-py3.4.egg / selenium / webdriver / support / select.py“,第76行,在select_by_value中opts = self.el.find_elements(By.CSS_SELECTOR,css)文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium-2.46.1-py3.4.egg/selenium/webdriver/remote/webelement.py”,第485行,在find_elements中{“使用”:by,“value”:value})['value']文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium-2.46 .1-py3.4.egg / selenium / webdriver / remote / webelement.py“,第447行,在_execute中返回self.parent.execute(command,params)文件”/Library/Frameworks/Python.framework/Versions/3.4 /lib/python3.4/site-packages/selenium-2.46.1-py3.4.egg/selenium/webdriver/remote/webdriver.py“,第193行,执行self.error_handler.check_response (回复)文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium-2.46.1-py3.4.egg/selenium/webdriver/remote/errorhandler.py” ,第181行,在check_response中引发exception_class(message,screen,stacktrace)selenium.common.exceptions.StaleElementReferenceException:消息:在缓存中找不到元素 - 也许页面自查找以来已更改Stacktrace:at fxdriver.cache.getElementAt (资源://fxdriver/modules/web-element-cache.js:9348)在Utils.getElementAt(文件:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpr37ozu9l/extensions/fxdriver@googlecode.com/components /driver-component.js:8942)在FirefoxDriver.prototype.findElementsInternal(文件:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpr37ozu9l/extensions/fxdriver@googlecode.com/components/driver-component.js:10685 )在FirefoxDriver.prototype.findChildElements(file:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpr37ozu9l/extensions/fxdriver@googlecode.com/c) omponents / driver-component.js:10706)在DelayedCommand.prototype.executeInternal / h(文件:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpr37ozu9l/extensions/fxdriver@googlecode.com/components/command-processor . js:12643)在DelayedCommand.prototype的DelayedCommand.prototype.executeInternal_(文件:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpr37ozu9l/extensions/fxdriver@googlecode.com/components/command-processor.js:12648) .execute / <(file:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpr37ozu9l/extensions/fxdriver@googlecode.com/components/command-processor.js:12590)

任何想法将不胜感激!

Alex回答后更新:

Traceback(最近一次调用最后一次):文件“/Users/Luigi/Desktop/selenium_attempt.py”,第18行,如果index> = len(select.options):File“/Library/Frameworks/Python.framework/Versions /3.4/lib/python3.4/site-packages/selenium-2.46.1-py3.4.egg/selenium/webdriver/support/select.py“,第46行,在选项中返回self.el.find_elements(By . TAG_NAME,'选项')文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium-2.46.1-py3.4.egg/selenium/webdriver/remote/webelement .py“,第485行,在find_elements中{”使用“:by,”value“:value})['value']文件”/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site -packages / selenium-2.46.1-py3.4.egg / selenium / webdriver / remote / webelement.py“,第447行,在_execute中返回self.parent.execute(command,params)文件”/ Library / Frameworks / Python .framework / Versions / 3.4 / lib / python3.4 / site-packages / selenium-2.46.1-py3.4.egg / selenium / webdriver / remote / webdriver.py“,第193行,执行self.error_handler.check_response (RES ponse)文件“/ Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/selenium-2.46.1-py3.4.egg/selenium/webdriver/remote/errorhandler.py”,第181行,在check_response中引发exception_class(message,screen,stacktrace)selenium.common.exceptions.StaleElementReferenceException:消息:在缓存中找不到元素 - 也许页面自查找以来已更改Stacktrace:at fxdriver.cache.getElementAt(resource:/在Utils.getElementAt上的/fxdriver/modules/web-element-cache.js:9348)(文件:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpzrilw39c/extensions/fxdriver@googlecode.com/components/driver-component .js:8942)在FirefoxDriver的FirefoxDriver.prototype.findElementsInternal(文件:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpzrilw39c/extensions/fxdriver@googlecode.com/components/driver-component.js:10685) . prototype.findChildElements(file:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpzrilw39c/extensions/fxdriver@googlecode.com/components/driver -component.js:10706)在DelayedCommand.prototype.executeInternal / h(文件:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpzrilw39c/extensions/fxdriver@googlecode.com/components/command-processor.js:12643 )在DelayedCommand.prototype.execute /的DelayedCommand.prototype.executeInternal_(文件:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpzrilw39c/extensions/fxdriver@googlecode.com/components/command-processor.js:12648) <(file:///var/folders/8s/hl6bx6z91yq6r81hpqg995rw0000gn/T/tmpzrilw39c/extensions/fxdriver@googlecode.com/components/command-processor.js:12590)

1 回答

  • 1

    每次加载新页面时都必须重新实例化 Select()

    from selenium import webdriver
    from selenium.webdriver.support.ui import Select
    
    
    driver = webdriver.Firefox()
    driver.get("http://www.hillsproducts.com/General.aspx/en-GB/PD/a-d-canine/original/can")
    
    index = 0
    while True:
        select = Select(driver.find_element_by_id("productSpecifier_product"))
    
        # exit the loop if all the options were seen
        if index >= len(select.options):
            break
    
        select.select_by_index(index)
        print(driver.current_url)
    
        index += 1
    

相关问题