RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1126904
Accepted
Никита Климов
Никита Климов
Asked:2020-05-17 16:49:11 +0000 UTC2020-05-17 16:49:11 +0000 UTC 2020-05-17 16:49:11 +0000 UTC

硒蟒。如何从 YouTube 通知中获取链接?

  • 772

我使用脚本登录并单击通知。但是如何显示此表单中的所有链接?使用了 htmldom 模块,但没有结果。下面是方法代码:

    def authorization(self):
    driver = './geckodriver'
    browser = webdriver.Firefox(executable_path=driver)
    browser.get('https://www.livejournal.com/identity/login.bml?type=google&auto_forwhat=wwws%24/')
    enterFirst = browser.find_element_by_class_name('RveJvd')
    login = browser.find_element_by_id('identifierId')
    time.sleep(2)
    login.send_keys('mylogin')
    enterFirst.click()
    time.sleep(2)
    password = browser.find_element_by_name('password')
    enterSecond = browser.find_element_by_id('passwordNext')
    password.send_keys('mypassword')
    enterSecond.click()
    browser.get('https://www.youtube.com')
    time.sleep(5)
    notifications = browser.find_element_by_class_name('ytd-notification-topbar-button-renderer')
    notifications.click()
    urls = []
    dom = htmldom.HtmlDom("https://www.youtube.com")  
    dom = dom.createDom()
    p_links = dom.find('a class="yt-simple-endpoint style-scope ytd-notification-renderer"')  
    for link in p_links:
      print ("URL: " +link.attr("href"))
    time.sleep(100)

怎么了?

python-3.x
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Ole Lukøje
    2020-05-17T21:21:45Z2020-05-17T21:21:45Z

    没有要求回应。只是由于作者对 selenium 感到困惑,所以我将分享我自己使用的东西。对我来说更方便:

    from distutils.util import get_platform
    from os import mkdir, path
    
    from selenium.common.exceptions import *
    from selenium.webdriver import Firefox
    from selenium.webdriver import FirefoxOptions
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.by import By
    from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
    from selenium.webdriver.firefox.webelement import FirefoxWebElement
    from selenium.webdriver.support import expected_conditions
    from selenium.webdriver.support.ui import WebDriverWait
    
    class FirefoxBrowser(Firefox):
        def __init__(self,
                     silent_mode: bool = False,
                     driver: str = 'geckodriver',
                     close_timeout: int = 0,
                     max_window: bool = True,
                     no_images: bool = True):
    
            """
    
            :param silent_mode: логическое, по умолчанию False отвечает за отображение окна браузера. Если запуск происходит
            из под Windows можно применить значение, True (отобразить окно), при запуске в Linux окно всегда скрыто;
    
            :param driver: указывает расположение файла `geckodriver`. Если файл находится не в дериктории проекта,
            необходимо указать полный путь к файлу, или добавить путь к файлу в переменную PATH;
    
            :param close_timeout: время задержки до закрытия окна браузера после завершения работы. По умолчани 0 сек.;
    
            :param max_window: параметр отвечающий за развертывание окна браузера до максимального размера при запуске
            :param no_images: блокировка изобращений на сайтах.
            """
    
            self.__close_timeout = close_timeout
    
            if get_platform().partition('-')[0] == 'linux':
                silent_mode = True
                max_window = False
    
            opt = FirefoxOptions()
            opt.headless = silent_mode
    
            profile = FirefoxProfile()
    
            if no_images:
                profile.set_preference('permissions.default.image', 2)
    
            if not path.exists('./logs/'):
                mkdir('./logs/')
    
            super().__init__(options=opt,
                             executable_path=driver,
                             firefox_profile=profile,
                             service_log_path='./logs/geckodriver.log')
            if max_window:
                self.maximize_window()
    
        def scroll_to_element(self, element: FirefoxWebElement):
            self.execute_script("arguments[0].scrollIntoView();", element)
    
        def wait_for_element(self, by: By, ident: str, timeout: int = 5):
            try:
                WebDriverWait(self, timeout).until(
                    expected_conditions.presence_of_all_elements_located(
                        (by, ident)
                    )
                )
                return self.find_element(by, ident)
            except TimeoutException:
                return None
    
        @property
        def action(self):
            return ActionChains(self)
    
    
    • 1
  2. Best Answer
    Никита Климов
    2020-05-17T22:45:17Z2020-05-17T22:45:17Z

    通过丢弃所有拐杖,如 htmldom 和 bs4 解决了这个问题。使用了正则表达式(模重新)。并查看网页的来源 - 一个简单的功能:

        element = browser.page_source
    

    更远:

        urls = re.findall(r'(?:<a class="yt-simple-endpoint style-scope ytd-notification-renderer" tabindex="0" role="link" href=")(.*)">', element)
        print(urls)
    

    谢谢大家。

    注意我的代码:它彻底解决了谷歌自动授权的问题。

    • 0

相关问题

  • 在 Linux 服务器上运行 Django 项目

  • 当您单击kivy设置中的关闭按钮时,如何调用更新应用程序本身的gui的方法

  • 制作一个按钮处理程序来调用该函数。那些。单击按钮时,该函数应运行。遥控机器人

  • 如何正确地将列表项添加到 Word 表格中?

  • 内容解析(Python、BeautifulSoup、请求)

  • 脚本不适用于 BeautifulSoup 和请求 (Python3x)

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5