Selenium with Python:从具有只读功能的表单中收集电子邮件

时间:2018-12-18 04:09:54

标签: python selenium web-scraping

我正在尝试从其中具有只读内容的网站上的表单中收集电子邮件地址。

<input name="email" id="email" type="text" class="form-control" value="example@gmail.com" readonly="">

我希望能够获得电子邮件地址(example@gmail.com),但是我尝试的所有操作均返回“无法找到元素”。

一切都已正确配置,因为脚本的其余部分都可以正常工作,而我遗漏了。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import re
import pandas as pd
import os

x = 0

all_volunteers = driver.find_elements_by_xpath('//*[@title="View volunteer record"]')
for volunteer in all_volunteers:
    volunteer.click()
    driver.implicitly_wait(3)
    # email_add = driver.find_element_by_id('emaillabel')
    #email_add = driver.switch_to_frame(driver.find_element_by_name('email'))
    #print(email_add.get_attribute('email'))
    #email_add = driver.find_element_by_css_selector('input id')
    #email_add = driver.find_element_by_xpath('//input [@name="email"]')
    #email_add = driver.find_element_by_tag_name('Email Address')
    email_add = driver.find_element_by_xpath('//*[@id="email"]')
    print(email_add.get_attribute('value'))
    # back button
    driver.execute_script("window.history.go(-1)")
    #increase counter by 1
    x += 1  

我尝试过的所有注释掉的内容(后跟#)。

有人能告诉我我做错了还是想念什么?

1 个答案:

答案 0 :(得分:0)

我有一个调试解决方案来定位元素。

  • 在浏览器中,打开包含电子邮件输入的网页
  • 打开开发人员工具(F12)
  • 在开发人员工具中打开控制台选项卡
  • 键入$x('//input[@id="email"]'),然后查看元素是否已定位。这是本机xpath定位器
  • 您也可以在控制台中尝试document.getElementById('email')

如果仍然找不到该元素,请尝试使用屏幕截图中标记的iFrame选择器来识别iframe并切换到该框架。

enter image description here 如果返回多个元素,则意味着您可能必须修改选择器才能找到唯一元素。