如何通过 Selenium Python 点击元素

How to click on a element through Selenium Python

提问人:DKM 提问时间:1/15/2019 最后编辑:undetected SeleniumDKM 更新时间:6/18/2022 访问量:6589

问:

我正在尝试使用 selenium 浏览器 python 获取 facebook 帐户的数据,但无法找到我可以寻找单击导出按钮的元素。

查看随附的屏幕截图enter image description here

我试过了,但它似乎给了我一个班级错误。

def login_facebook(self, username, password):
    chrome_options = webdriver.ChromeOptions()
    preference = {"download.default_directory": self.section_value[24]}

    chrome_options.add_experimental_option("prefs", preference)
    self.driver = webdriver.Chrome(self.section_value[20], chrome_options=chrome_options)
    self.driver.get(self.section_value[25])

    username_field = self.driver.find_element_by_id("email")
    password_field = self.driver.find_element_by_id("pass")

    username_field.send_keys(username)
    self.driver.implicitly_wait(10)

    password_field.send_keys(password)
    self.driver.implicitly_wait(10)

    self.driver.find_element_by_id("loginbutton").click()
    self.driver.implicitly_wait(10)

    self.driver.get("https://business.facebook.com/select/?next=https%3A%2F%2Fbusiness.facebook.com%2F")
    self.driver.get("https://business.facebook.com/home/accounts?business_id=698597566882728")
    self.driver.get("https://business.facebook.com/adsmanager/reporting/view?act="
                    "717590098609803&business_id=698597566882728&selected_report_id=23843123660810666")
    # self.driver.get("https://business.facebook.com/adsmanager/manage/campaigns?act=717590098609803&business_id"
    #                 "=698597566882728&tool=MANAGE_ADS&date={}-{}_{}%2Clast_month".format(self.last_month,
    #                                                                                      self.first_day_month,
    #                                                                                      self.last_day_month))

    self.driver.find_element_by_id("export_button").click()
    self.driver.implicitly_wait(10)
    self.driver.find_element_by_class_name("_43rl").click()
    self.driver.implicitly_wait(10)

你能告诉我如何点击出口按钮吗?

python-2.7 selenium xpath css-selectors webdriverwait

评论

0赞 Kryesec 1/15/2019
可能重复 stackoverflow.com/questions/35531069/...
0赞 QHarr 1/15/2019
您是否尝试过通过文本“导出”进行搜索?
0赞 DKM 1/15/2019
@QHarr这是一种使用文本“self.driver.find_elements_by_link_text(”导出“).click()”的方法
0赞 DKM 1/15/2019
似乎仍然出现错误,无法确定找到正确的关联类或其他:(的方法

答:

-4赞 akshay patil 1/15/2019 #1

要在 Facebook 等应用程序上运行自动化脚本非常困难,YouTube 非常困难,因为它们是巨大的公司,并且它们的 Web 应用程序是由世界上最好的开发人员开发的,但运行自动化脚本并非不可能,有时元素是动态生成的,有时是隐藏的或不活动的,您不能只是去点击

一种解决方案是您可以通过 XPath Realtive 或 Absolute 的单击操作来执行,资源文件中没有将 ID 指定为“export_button”,我认为这可能会对您有所帮助

您还可以通过类名或CSS选择器找到元素,正如我在屏幕截图中看到的那样,类名存在“_271K _271m _1qjd层确认”,您可以对其执行单击操作

评论

0赞 DKM 1/15/2019
export_button与不同的按钮相关联,如您在我的代码中看到的那样。
4赞 DKM 1/15/2019 #2

好吧,我可以使用xpath解决它。 这是解决方案

self.driver.find_element_by_xpath("//*[contains(@class, '_271k _271m _1qjd layerConfirm')]").click()
3赞 undetected Selenium 1/15/2019 #3

将文本作为 Export 的元素是动态生成的元素,因此要找到该元素,您必须诱导 WebDriverWait 才能单击该元素,并且可以使用任一定位器策略

  • 使用CSS_SELECTOR

    WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.layerConfirm>div[data-hover='tooltip'][data-tooltip-display='overflow']"))).click()
    
  • 使用 XPATH

    WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'layerConfirm')]/div[@data-hover='tooltip' and text()='Export']"))).click()
    
  • 注意:您必须添加以下导入:

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