Selenium单击JS按钮Python?

2024-05-29 04:04:33 发布

您现在位置:Python中文网/ 问答频道 /正文

是的,也有类似的问题,但通读这些问题后,我没能找到解决问题的办法

以下情况:我正在尝试单击“https://charleston.craigslist.org/ctd/d/charleston-2018-nissan-sentra-sedan-4d/7108660907.html”上的“回复”按钮,执行此操作后,会出现一个弹出窗口,我将在其中单击另一个按钮,但让我们从第一个按钮开始,因为“回复”单击本身非常麻烦

“答复”按钮具有以下X路径:

'/html/body/section/section/header/div[2]/div/button'

说到这里,源代码是:

<button role="button" class="reply-button js-only" data-href="/__SERVICE_ID__/chs/ctd/7108660907">
      reply
    </button> 

(参见上述网站上的代码)

但是,我使用Selenium(Python)的方法不起作用:

reply_button = '/html/body/section/section/header/div[2]/div/button'
driver.get('https://charleston.craigslist.org/ctd/d/charleston-2018-nissan-sentra-sedan-4d/7108660907.html')

driver.find_element_by_xpath(reply_button).click()

每次我尝试时,网站都会正确加载(即使是在实现time.sleep(x))并尝试单击按钮,但这失败了,网站只是刷新-我猜他们要么重新设置受Selenium控制的浏览器,要么单击是不合法的,要么我的代码中没有捕捉到任何正确的内容。。有人能帮忙吗

顺便说一句,我已经试过“按类名”搜索了,但也没用


Tags: httpsorgdiv网站htmlsectionbuttonreply
1条回答
网友
1楼 · 发布于 2024-05-29 04:04:33

这个Xpath:'/html/body/section/section/header/div[2]/div/button'类似于当您得到一个带有类似step forward until you see a car then turn left 30° then step forward until you see a tree then hop twice then go to the second house to your right的指令的映射时。使用不安全,请避免使用此类路径。如果页面布局发生更改,您的路径可能会无效

试试这个:

button = driver.find_element_by_xpath('//*[@class="reply-button js-only"]')
button.click()

单击按钮打开“显示电话号码”弹出窗口(可通过driver.find_element_by_xpath('//*[@class="show-phone"]')找到)

说明:

如果需要正确的Xpath,请检查要与之交互的内容。要单击的按钮如下所示:

<button role="button" class="reply-button js-only" data-href="/__SERVICE_ID__/chs/ctd/7108660907">
      reply
    </button>

您可以看到它没有“id”标记,但它是一个带有特定类的按钮。您可以立即复制“类”部分->class="reply-button js-only"

现在,您可以检查它是否足够独特:

driver.find_elements_by_xpath('//*[@class="reply-button js-only"]')

如果“find elements”返回一个结果,通常应该可以。您可以看到,我所做的只是将类粘贴在这个:driver.find_elements_by_xpath('//*[@和这个]')

如果需要更高的精度,可以指定它是一个按钮:

driver.find_element_by_xpath('//button[@class="reply-button js-only"]')

或者它是类为:class="actions-combo"的元素的直接子元素,因此更安全的路径是:

driver.find_element_by_xpath('//*[@class="actions-combo"]/button[@class="reply-button js-only"]')

此模式适用于所有webelement属性,而不仅仅适用于类。您也可以使用role="button"进行更多筛选。查找Xpath,它是一个非常简洁的东西

相关问题 更多 >

    热门问题