在网页抓取和浏览器自动化方面,我有点新意,所以感谢您的帮助!
我使用Python的Selenium软件包的目标是:
问题是我使用以下代码为#2的每个登录字段确定了xpath:
def orderMcMasterParts():
# Open each of the websites required
mcmBrowser = webdriver.Firefox()
mcmBrowser.get('http://www.mcmaster.com/#orders/')
# Log in with my credentials
usernameElem = mcmBrowser.find_element_by_xpath("//input[@class='LoginWebPartLayout_InpBx' and @type='text']")
usernameElem.send_keys(mcmUsername)
passwordElem = mcmBrowser.find_element_by_xpath("//input[@class='LoginWebPartLayout_InpBx' and @type='password')
passwordElem.send_keys(mcmPassword)
passwordElem.submit()
但我继续得到NoSuchElementException。当我使用requests模块下载该页面上的HTML时,我发现HTML代码中没有出现这些字段。它们似乎以Javascript片段形式存在。
我的问题是我如何互动并输入这些字段?
答案 0 :(得分:0)
如果页面上没有元素,则会出现此问题。其中一个原因可能是您需要等到元素加载。您至少有两个选项:显式WebDriver等待和隐式WebDriver等待。
如果我们谈论具体的例子:http://www.mcmaster.com/#orders/
我想到了两件事(快速调试后):
iframe
内:在访问iframe中的元素之前,您需要通过Selenium切换到iframe In [17]: driver.switch_to.frame? Type: instancemethod File: /usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/switch_to.py Definition: driver.switch_to.frame(self, frame_reference) Docstring: Switches focus to the specified frame, by index, name, or webelement. :Args: - frame_reference: The name of the window to switch to, an integer representing the index, or a webelement that is an (i)frame to switch to. :Usage: driver.switch_to.frame('frame_name') driver.switch_to.frame(1) driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])