【问题标题】:Accessing webpage iframes in Python在 Python 中访问网页 iframe
【发布时间】:2018-07-20 13:43:35
【问题描述】:

我正在尝试访问 Indeed 工作申请平台上的“立即申请”按钮。当我单击它时,它会弹出一个新框架,我想在其中访问元素。我已经在其他网页上测试过代码,并且可以成功访问 iframe 的元素,但在此特定页面上出现错误。

代码如下:

from selenium import webdriver

driver = webdriver.Firefox(executable_path = 'C:\\Users\\Sonorityscape\\Desktop\\geckodriver.exe')

driver.get('https://www.indeed.com/jobs?q=Game%20Audio&start=10&vjk=836d4ff796e19392#')

iframes = driver.find_elements_by_tag_name("iframe")
iframes
[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fdfc346e-535b-45ea-b127-fe5d386fd6b7", element="d699e195-e4f5-4430-9851-9d98a0af925d")>]

driver.switch_to.frame(iframes[0])
driver.find_element_by_css_selector('#input-applicant\.firstName')

这是错误:

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    driver.find_element_by_css_selector('#input-applicant\.firstName')
  File "C:\Users\Sonorityscape\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 597, in find_element_by_css_selector
    return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
  File "C:\Users\Sonorityscape\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 966, in find_element
    'value': value})['value']
  File "C:\Users\Sonorityscape\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Sonorityscape\AppData\Local\Programs\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: #input-applicant\.firstName

这是该页面的链接:

https://www.indeed.com/jobs?q=Game%20Audio&start=10&vjk=836d4ff796e19392#

【问题讨论】:

    标签: python html selenium


    【解决方案1】:

    根据您的代码,您没有单击“立即应用”按钮,并且在单击它后正在加载框架,并在第二个 iframe 中加载。以下代码可能对您有所帮助。

    from selenium import webdriver
    
    driver = webdriver.Firefox(executable_path = 'C:\\Users\\Sonorityscape\\Desktop\\geckodriver.exe')
    
    driver.get('https://www.indeed.com/jobs?q=Game%20Audio&start=10&vjk=836d4ff796e19392#')
    
    driver.find_element_by_css_selector('span.indeed-apply-button-label').click() #click on apply now button
    
    iframes = driver.find_elements_by_tag_name("iframe")
    
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(frames[1])
    
    driver.find_element_by_css_selector('#input-applicant\.firstName').send_keys("firstname")
    

    【讨论】:

    • 不幸的是,它重现了同样的错误。一切正常,直到最后一行。由于某种原因,CSS 选择器无法正常工作。
    • 尝试使用 xpath 否则
    • 更新了代码以等待帧加载,请立即尝试更新答案。
    • 我已经在 Python 中逐行执行,但它不起作用。我认为时机不是问题。
    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 2014-03-08
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多