首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python - Selenium不能点击href="javascript:void(0);“

Python - Selenium不能点击href="javascript:void(0);“
EN

Stack Overflow用户
提问于 2018-09-26 07:23:19
回答 1查看 631关注 0票数 0

每当我尝试抓取Eastleigh网站时,它会做所有它需要做的事情。它转到URL,自动点击“高级设置”,输入决定日期,点击搜索,并获得所有的href链接,但当它试图转到它们时,它失败了……为什么?它所需要做的就是点击href链接,但它不会;-;

有人能帮我修一下这个吗?

代码:

代码语言:javascript
运行
复制
import sys
import time
import config
import datetime
from selenium import webdriver

print("1. Custom Date")
print("2. Last Week")
choice = input("#: ")
if choice == "1":
    print("Start Example: 1/8/2018")
    startDate = input("Start Date: ")
    print("Stop Example: 30/8/2018")
    stopDate = input("Stop Date: ")

elif choice == "2":
    sd = str(datetime.datetime.today().day) # Gets day of the month
    sm = str(datetime.datetime.today().month) # Gets month of the year
    sy = str(datetime.datetime.today().year) # Gets year
    nsd = int(sd) # Turns string variable "sd" into an integer
    startDate = "%s/%s/%s" % (nsd-7, sm, sy) # Makes a new date string. Minus 7 off of the original date to go back 1 week
    stopDate = "%s/%s/%s" % (nsd-1, sm, sy) # Makes a new date string. Minus 1 off of the original date, (Minusing 1 was Steve's idea, not mine.)
else:
    print("This is not a choice.")
    print("Press Enter to exit...")
    input("")
    sys.exit()

url = "https://planning.eastleigh.gov.uk/s/public-register"

driver = webdriver.Chrome(executable_path=r"C:\Users\Goten\Desktop\chromedriver.exe")
driver.get(url)

time.sleep(2)

driver.find_element_by_xpath("(//li[@class='slds-tabs_default__item'])[1]").click()

driver.find_element_by_id("728:0").click() # This changes for some reason... I cannot quite find a way to make it stay the same...
driver.find_element_by_id("728:0").send_keys(startDate)

driver.find_element_by_id("744:0").click() # This also changes
driver.find_element_by_id("744:0").send_keys(stopDate)

driver.find_element_by_xpath("(//button[@name='submit'])[2]").click()

time.sleep(2)

driver.find_element_by_xpath("//*[text()='View More']").click()

result = []

elements = driver.find_elements_by_css_selector(".slds-truncate a")
links = [link.get_attribute("href") for link in elements]

result.extend(links)

print(result)

for link in result:
    result.remove(link)
    driver.get(link)
    for i in range(1):
        div = driver.find_element_by_id("slds-form-element__group").text
        log = open("log.txt", "a")
        log.write(div + "\n")
    log.write("\n")

#driver.close()

输出:

代码语言:javascript
运行
复制
[8520:11412:0926/001704.487:ERROR:install_util.cc(603)] Failed to read HKLM\SOFTWARE\Policies\Google\Chrome\MachineLevelUserCloudPolicyEnrollmentToken: The system cannot find the file specified. (0x2)

DevTools listening on ws://127.0.0.1:59340/devtools/browser/bc325d32-310c-43e6-b8cf-dcfceaebf5a5
['javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);', 'javascript:void(0);']
Traceback (most recent call last):
  File "code/main.py", line 17, in <module>
    import urls.eastleigh
  File "C:\Users\Goten\Anaconda3\code\urls\eastleigh.py", line 61, in <module>
    driver.get(link)
  File "C:\Users\Goten\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 332, in get
    self.execute(Command.GET, {'url': url})
  File "C:\Users\Goten\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Goten\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: unsupported protocol
  (Session info: chrome=68.0.3440.106)
  (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.17134 x86_64)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-26 08:55:46

事实上,您不能指望这些ids,因为它们是动态生成的,正如您自己所指出的那样。一个hackie解决方案是:

代码语言:javascript
运行
复制
...
inputs = driver.find_elements_by_class_name(" input")

received_from_index = 1
received_to_index = 2
decision_from_index = 3
decision_to_index = 4

received_from = inputs[received_from_index]
received_to = inputs[received_to_index]

received_from.clear()
received_from.send_keys(startDate)

received_to.clear()
received_to.send_keys(stopDate)

这将填充字段(不确定是否需要全部填充)。在此之后,您的脚本将提交并正确获取结果页面。

您需要修改代码的这一部分:

代码语言:javascript
运行
复制
for link in result:
    result.remove(link)
    driver.get(link)
    ...

对于您需要的第二部分:

代码语言:javascript
运行
复制
...
driver.find_element_by_xpath("//*[text()='View More']").click()

links = driver.find_elements_by_xpath("""//*[@id="arcusbuilt__PApplication__c"]/div/div/h4/a""")

print "Total of planning applications : ", len(links)


for link_index in range(1, len(links) +1):
    result_link = driver.find_element_by_xpath("""//*[@id="arcusbuilt__PApplication__c"]/div[%d]/div/h4/a"""%link_index)

    result_link.click()
    print "visiting link %d"%link_index

    WebDriverWait(driver, 20).until(
     EC.presence_of_element_located((By.NAME, "BackButton")))

    time.sleep(3)
    #DO WHAT YOU NEED HERE...

    back_btn = driver.find_element_by_name("BackButton")
    back_btn.click()

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52507857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档