【问题标题】:Problem in Find Element after page changed in Selenium Python在 Selenium Python 中更改页面后查找元素的问题
【发布时间】:2020-02-18 07:57:53
【问题描述】:

我在 python 中使用网络爬虫库作为 [Selenium]。 我想提交一个表单(没有 AJAX 的多个表单)

所以,我写了这段代码:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://exportgram.com/')

one = driver.find_element_by_xpath('//*[@id="home"]/form/div[1]/div/input[1]')
one.click()
one.send_keys('https://www.instagram.com/p/B6OCVnTglgz/')
two = driver.find_element_by_xpath('//*[@id="home"]/form/div[2]/button')
two.click()
time.sleep(3)


three = driver.find_element_by_xpath('//*[@id="home"]/form/div[2]/button')
three.click()

现在,我无法访问“三”,因为这在新页面上可用。

没有办法解决这个问题吗?

[注意:点击“二”后,页面变为“https://example.com/media.php”]

【问题讨论】:

  • 页面更改后,添加等待获取元素,因为它可能是页面加载并且该元素在 HTML 内容中不可点击。

标签: python selenium web-scraping scrape


【解决方案1】:

如果点击第二个元素后,它会将您重定向到另一个页面,这意味着该表单已部分发送。浏览器加载新地址后,您将能够找到新的 DOM 树,因此您必须等待它出现。

您可以通过以下代码做到这一点:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

timeout = 10
three = WebDriverWait(driver, timeout).until(EC.presence_of_element_located((By.XPATH, '//*[@id="home"]/form/div[2]/button')), 'Time out')
three.click()

【讨论】:

  • 对不起伙计。返回错误:消息超时。但不点击项目'三'必须运行一些代码到终端(CMD)来安装特定的包?
  • 您确定该项目在第二页上可用吗?没有一堆异常,很难说什么。
猜你喜欢
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 2013-08-01
  • 2021-07-04
  • 1970-01-01
相关资源
最近更新 更多