python-3.x 无此类元素异常:使用webdriver从Uniprot获取序列

cgh8pdjw  于 2022-12-24  发布在  Python
关注(0)|答案(2)|浏览(137)

我试图从Uniprot下载蛋白质序列与以下代码.

driver = webdriver.Chrome(driver_location)

#get website 
driver.get('https://www.uniprot.org/uniprotkb/P19515/entry#sequences')

#stall to load webpage
time.sleep(5)

#scroll webpage
#driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

#create instance of button and click
button = driver.find_element_by_link_text("Copy sequence")
button.click()

运行上一个代码块将返回以下错误

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"Copy sequence"}

此外,下面是css布局enter image description here
我认为问题是按钮是动态的或隐藏的,以至于webdriver无法找到按钮。我知道有一个Uniport API,可能还有其他更有效的方法来下载蛋白质序列,但为了学习如何修改我的代码,为什么按钮不可点击?

xnifntxz

xnifntxz1#

链接文本只有在定位器有超链接的情况下才有效,所以在这种情况下它不会有效,因为它是一个将文本复制到剪贴板的按钮,而不是一个href标记。
但是,您可以修改代码以

button = driver.find_element(By.CSS_SELECTOR, "button.button.primary.tertiary")

并且它将执行点击操作。

9jyewag0

9jyewag02#

link_text只适用于a标记,不适用于button标记。但是如果您使用SeleniumBase framework on GitHub,则可以使用一个特殊的TAG:contains("TEXT")选择器来单击按钮。
下面是一个工作脚本:(使用pip install seleniumbase安装seleniumbase后,使用pythonpytest运行脚本)

from seleniumbase import BaseCase

class RecorderTest(BaseCase):
    def test_recording(self):
        self.open("https://www.uniprot.org/uniprotkb/P19515/entry#sequences")
        self.click('button:contains("Copy sequence")')
        self.sleep(3)

if __name__ == "__main__":
    from pytest import main
    main([__file__])

您可以使用SeleniumBase Recorder从手动浏览器操作中生成类似的脚本。if __name__ == "__main__":的最后一部分允许您使用python而不仅仅是pytest运行脚本。

相关问题