如何使用 Python 搜索 HTML 元素? Python 网络机器人错误
How can I search for a HTML element using Python? Python Web Bot Error
我正在按照教程创建一个可以在任何网页上执行任务的机器人。我正在使用 Python3 搜索任何随机网站,然后使用搜索结果(来自该网站)打印数据。我导入了一个 selenium webdriver,并确保它设置正确。
我面临的问题是我正在尝试创建一个循环搜索结果的 for 循环。此 for 循环使用我正在测试的网站中的 class 名称 - 因此机器人可以识别文章元素。问题是 class 名称是:c-entry-box--compact__title
这是造成
SyntaxError: Cannot assign to literal
有什么办法解决这个问题吗?本网站的搜索结果没有任何其他更短的 class 名称或更短的 ID,也不包含连字符或下划线。我是 运行 我在测试网站 'theverge' 搜索结果中的代码。
相关代码:
try:
main = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "c-entry-box--compact__body"))
)
articles = main.find_element_by_class_name("c-entry-box--compact__title")
for "c-entry-box--compact__title" in articles:
header = articles.find_element_by_class_name("c-entry-box--compact__title")
print(header.text)
finally:
driver.quit()
非常感谢能为我指明正确方向的任何提示或想法!
更新:11:44pm 21/8
我为 class 名称创建了一个变量。现在错误是
...line 28, in <module>
for article in articles:
TypeError: 'WebElement' object is not iterable
更新 12:12am 22/8
我对最近的海报进行了更改并调整了一些代码。我现在得到的唯一错误是与键盘输入或键的使用有关。这是一个 AttributeError: 'list' object has no attribute 'send_keys'
我的代码是
search_button = driver.find_elements_by_id("icon-search")
search = driver.find_elements_by_name("q")
search.send_keys('facebook')
search.send_keys(Keys.RETURN)
获取所有 header 文本 Induce WebDriverWait
() 并等待 visibility_of_all_elements_located
() 和后面的 css 选择器.
driver.get("https://www.theverge.com/")
headerelements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"div.c-entry-box--compact__body>h2>a")))
for head in headerelements:
print(head.text)
控制台输出:
BRYDGE’S LATEST KEYBOARDS TURN A SURFACE PRO OR GO INTO A STANDARD LAPTOP
Ikea gives its 2021 catalog an Animal Crossing-themed makeover in Taiwan
School nurses are on the frontlines of the pandemic
AN INNOCENT TYPO LED TO A GIANT 212-STORY OBELISK IN MICROSOFT FLIGHT SIMULATOR
The epic campaign to win Elon Musk’s Tesla factory with memes
NASA is going to try to hunt down a leak on the International Space Station this weekend
What’s the best student laptop? We asked students
Goodbye to Patriot Act, a comedy show that was a different kind of angry
How to pick the right headphones for kids
Swipe left, Elon stans: that Tesla dating app is a joke, for now
Leaked Google Pixel 5 renders show dual rear camera and fingerprint sensor
Minecraft Education is perfectly suited for this surreal back-to-school moment
What we listen to while working from home
Samsung’s Galaxy S20 is receiving Note 20 features with new One UI update
Facebook’s old web design will disappear in September
Apple reportedly using cheaper iPhone battery parts to offset 5G cost
THE VERGE’S BACK TO SCHOOL SPECIAL
Epic to host a #FreeFortnite tournament with anti-Apple prizes
After inking a deal with Netflix, Trump impersonator Sarah Cooper is also getting a TV show
Magic Leap’s lost work The Last Light gets a surprise release after its developers were laid off
Android 11 phones will summon Android Auto wirelessly, no need to pull out your device
HOW FORTNITE’S EPIC BATTLE WITH APPLE COULD RESHAPE THE ANTITRUST FIGHT
Adobe accidentally deleted people’s photos in latest Lightroom update
Major news publishers ask Apple what can get them an App Store deal like Amazon’s
Tesla is working on a sensor that can detect a child left behind in a hot car
Fertility app Premom reportedly shared customer data with Chinese companies
Mark Zuckerberg testified before the FTC as part of its Facebook antitrust probe
How to get Microsoft’s xCloud and stream Xbox games on your phone right now
Where to sit on the school bus just got a lot more complicated
Former Uber security chief charged with paying hush money to cover up 2016 hack
Google confirms Android 11 will limit third-party camera apps because of location spying fears
Uber and Lyft shutdown in California averted as judge grants emergency stay
Netflix is re-creating iconic Stranger Things sets in LA, and you can drive your car through them
Google’s Pixel Buds are now available in more colors nearly four months after launch
Airbnb puts global ban on house parties to support social distancing guidelines
HOUSES ARE INFLUENCERS NOW, AND THIS ONE BURNED TO THE GROUND
Lyft will suspend its ride-hailing service in California
Reddit reports 18 percent reduction in hateful content after banning nearly 7,000 subreddits
A mail-in COVID-19 test company switched to FedEx because of USPS delays
Steve Bannon charged with fraud over crowdfunded border wall
Razer gets into the ergonomic game with its new .99 Pro Click wireless mouse
SAMSUNG GALAXY NOTE 20 ULTRA REVIEW: BIG PHONE, SMALL UPDATES
Google’s Pixel Buds get new transcribe mode, attention alerts, and sharing detection
Control’s publisher explains why it won’t offer a free next-gen upgrade
SpaceX still pressing ahead with its Air Force lawsuit, despite winning coveted Air Force contract
We're building great things, and we need your talent.
DoorDash launches grocery delivery to compete with Amazon and Instacart
你的脚本有问题
articles = main.find_element_by_class_name("c-entry-box--compact__title")
find_element_by_class_name()
将 return 单个网络元素。要获取您需要使用的元素列表 find_elements_by_class_name()
因此应该是
articles = main.find_elements_by_class_name("c-entry-box--compact__title")
但是我建议使用我的线性方法。
我正在按照教程创建一个可以在任何网页上执行任务的机器人。我正在使用 Python3 搜索任何随机网站,然后使用搜索结果(来自该网站)打印数据。我导入了一个 selenium webdriver,并确保它设置正确。
我面临的问题是我正在尝试创建一个循环搜索结果的 for 循环。此 for 循环使用我正在测试的网站中的 class 名称 - 因此机器人可以识别文章元素。问题是 class 名称是:c-entry-box--compact__title
这是造成
SyntaxError: Cannot assign to literal
有什么办法解决这个问题吗?本网站的搜索结果没有任何其他更短的 class 名称或更短的 ID,也不包含连字符或下划线。我是 运行 我在测试网站 'theverge' 搜索结果中的代码。
相关代码:
try:
main = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "c-entry-box--compact__body"))
)
articles = main.find_element_by_class_name("c-entry-box--compact__title")
for "c-entry-box--compact__title" in articles:
header = articles.find_element_by_class_name("c-entry-box--compact__title")
print(header.text)
finally:
driver.quit()
非常感谢能为我指明正确方向的任何提示或想法!
更新:11:44pm 21/8
我为 class 名称创建了一个变量。现在错误是
...line 28, in <module>
for article in articles:
TypeError: 'WebElement' object is not iterable
更新 12:12am 22/8
我对最近的海报进行了更改并调整了一些代码。我现在得到的唯一错误是与键盘输入或键的使用有关。这是一个 AttributeError: 'list' object has no attribute 'send_keys'
我的代码是
search_button = driver.find_elements_by_id("icon-search")
search = driver.find_elements_by_name("q")
search.send_keys('facebook')
search.send_keys(Keys.RETURN)
获取所有 header 文本 Induce WebDriverWait
() 并等待 visibility_of_all_elements_located
() 和后面的 css 选择器.
driver.get("https://www.theverge.com/")
headerelements=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,"div.c-entry-box--compact__body>h2>a")))
for head in headerelements:
print(head.text)
控制台输出:
BRYDGE’S LATEST KEYBOARDS TURN A SURFACE PRO OR GO INTO A STANDARD LAPTOP
Ikea gives its 2021 catalog an Animal Crossing-themed makeover in Taiwan
School nurses are on the frontlines of the pandemic
AN INNOCENT TYPO LED TO A GIANT 212-STORY OBELISK IN MICROSOFT FLIGHT SIMULATOR
The epic campaign to win Elon Musk’s Tesla factory with memes
NASA is going to try to hunt down a leak on the International Space Station this weekend
What’s the best student laptop? We asked students
Goodbye to Patriot Act, a comedy show that was a different kind of angry
How to pick the right headphones for kids
Swipe left, Elon stans: that Tesla dating app is a joke, for now
Leaked Google Pixel 5 renders show dual rear camera and fingerprint sensor
Minecraft Education is perfectly suited for this surreal back-to-school moment
What we listen to while working from home
Samsung’s Galaxy S20 is receiving Note 20 features with new One UI update
Facebook’s old web design will disappear in September
Apple reportedly using cheaper iPhone battery parts to offset 5G cost
THE VERGE’S BACK TO SCHOOL SPECIAL
Epic to host a #FreeFortnite tournament with anti-Apple prizes
After inking a deal with Netflix, Trump impersonator Sarah Cooper is also getting a TV show
Magic Leap’s lost work The Last Light gets a surprise release after its developers were laid off
Android 11 phones will summon Android Auto wirelessly, no need to pull out your device
HOW FORTNITE’S EPIC BATTLE WITH APPLE COULD RESHAPE THE ANTITRUST FIGHT
Adobe accidentally deleted people’s photos in latest Lightroom update
Major news publishers ask Apple what can get them an App Store deal like Amazon’s
Tesla is working on a sensor that can detect a child left behind in a hot car
Fertility app Premom reportedly shared customer data with Chinese companies
Mark Zuckerberg testified before the FTC as part of its Facebook antitrust probe
How to get Microsoft’s xCloud and stream Xbox games on your phone right now
Where to sit on the school bus just got a lot more complicated
Former Uber security chief charged with paying hush money to cover up 2016 hack
Google confirms Android 11 will limit third-party camera apps because of location spying fears
Uber and Lyft shutdown in California averted as judge grants emergency stay
Netflix is re-creating iconic Stranger Things sets in LA, and you can drive your car through them
Google’s Pixel Buds are now available in more colors nearly four months after launch
Airbnb puts global ban on house parties to support social distancing guidelines
HOUSES ARE INFLUENCERS NOW, AND THIS ONE BURNED TO THE GROUND
Lyft will suspend its ride-hailing service in California
Reddit reports 18 percent reduction in hateful content after banning nearly 7,000 subreddits
A mail-in COVID-19 test company switched to FedEx because of USPS delays
Steve Bannon charged with fraud over crowdfunded border wall
Razer gets into the ergonomic game with its new .99 Pro Click wireless mouse
SAMSUNG GALAXY NOTE 20 ULTRA REVIEW: BIG PHONE, SMALL UPDATES
Google’s Pixel Buds get new transcribe mode, attention alerts, and sharing detection
Control’s publisher explains why it won’t offer a free next-gen upgrade
SpaceX still pressing ahead with its Air Force lawsuit, despite winning coveted Air Force contract
We're building great things, and we need your talent.
DoorDash launches grocery delivery to compete with Amazon and Instacart
你的脚本有问题
articles = main.find_element_by_class_name("c-entry-box--compact__title")
find_element_by_class_name()
将 return 单个网络元素。要获取您需要使用的元素列表 find_elements_by_class_name()
因此应该是
articles = main.find_elements_by_class_name("c-entry-box--compact__title")
但是我建议使用我的线性方法。