使用带有selenium的python从表中抓取数据时遇到问题

时间:2017-06-24 10:55:49

标签: python selenium xpath web-scraping web-crawler

我已经使用python与selenium结合编写了一个脚本来解析目标页面中的表格,我可以按照以下为了清晰起见而尝试描述的一些步骤进行操作。它确实到达目的地,但是在从该表中抓取数据时它会在控制台中显示错误"无法找到元素"。我尝试使用在线xpath测试器来查看它是否错误,但我发现我在脚本中使用的xpath用于" td_data"是正确的。我想,我在这里失踪的是我所不知道的。希望有人可以看看它,并为我提供一个解决方法。 顺便说一句,网站链接在我的脚本中给出。

链接以查看表格的html内容:" https://www.dropbox.com/s/kaom5qzk78xndqn/Partial%20Html%20content%20for%20the%20table.txt?dl=0"

到达我的脚本能够维护的目标页面的步骤:

  1. 选择"我已阅读并理解上述"
  2. 使用此关键字" pump"在位于右下方的输入框中"选择医疗设备"。
  3. 选中复选框"为"泵"找到的设备。
  4. 最后,按下搜索按钮
  5. 到目前为止我尝试过的脚本:

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get('http://apps.tga.gov.au/Prod/devices/daen-entry.aspx')
    
    driver.find_element_by_id('disclaimer-accept').click()
    time.sleep(5)
    
    driver.find_element_by_id('medicine-name').send_keys('pump')
    time.sleep(8)
    
    driver.find_element_by_id('medicines-header-text').click()
    
    driver.find_element_by_id('submit-button').click()
    time.sleep(7)
    
    for item in driver.find_elements_by_xpath('//div[@class="table-responsive"]'):
        for tr_data in item.find_elements_by_xpath('.//tr'):
            td_data = tr_data.find_element_by_xpath('.//span[@class="hovertext"]//a')
            print(td_data.text)
    
    driver.close()
    

1 个答案:

答案 0 :(得分:1)

你为什么不这样做:

27233
27283
27288
27289
27390
27413
27441
27520
25445
27816
27866
27970
28033
28238
26999
28264
28407
28448
28437
28509
28524
28553
28647
28677
28646

输出:

exports.logIn = function (req, res, data) {
  var username = req.body.username.toString();
  var password = req.body.password.toString();
  connection.connection();
  global.connection.query('SELECT * FROM Utilizador WHERE Nome_Utilizador = ? LIMIT 1', [username], function (err, result) {

if (result.length > 0) {
  if (result) {
    var object = JSON.parse(JSON.stringify(result));
    var userObject = object[0];
    var userQ = object[0].Nome_Utilizador;
    global.connection.query('SELECT Password_Utilizador from Utilizador where Nome_Utilizador = ?', [username], function (err, result) {
      console.log(result);
      if (result.length > 0) {
        if (result) {
          var object2 = JSON.parse(JSON.stringify(result));
          var passQ = object[0].Password_Utilizador;
          if (password == passQ) {
            console.log("Login efectuado com sucesso");
            console.log(userObject);
            res.render('home', { title: 'perfil', layout: 'perfil', data: userObject });
          } else {
            console.log("1");
          }
        }
      } else if (err) {
        console.log("asdsadas");
      } else {
        console.log("2");
        res.render('home', { title: 'perfil', layout: 'registo' });
      }
    });
  }
} else if (err) {
  console.log(err);

} else {
  console.log("Utilizador nao encontrado");
  res.render('home', { title: 'perfil', layout: 'registo' });
}
});
};

也许您想考虑使用driver.page_source保存页面,拉出表格,将其另存为html文件。然后使用html中的pandas将表打开到数据帧