如何从自定义下拉列表中选择要更改的页面项目


<bc-dropdown class="hydrated" options="Week 1,Week 2,Week 3,Week 4,Week 5,Week 6,Week 7,Week 8,Week 9,Week 10,Week 11,Week 12,Week 13,Week 14,Week 15,Bowls" selected="Week 1" uid="fd5704d7-8531-483b-9f92-96340b80da78">
<!--r.4-->
<div class="bc-dropdown bc-wc-select-container bc-week-dropdown-width d-flex justify-content-end">
<div class="position-relative w-100">
<div class="bg-white h-100 sport-dropdown w-100">
<div class="align-items-center d-flex h-100 justify-content-between my-auto">
<p>
<strong class="category font-sf-ui-display-medium my-auto pl-3">
Week 2</strong>
</p>
<span class="pr-3">
<i class="fa-angle-down fas"></i>
</span>
</div>
</div>
<div class="bc-week-dropdown-width dropdown-menu overflow-auto">
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 1">
<strong class="category-text">
Week 1</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 2">
<strong class="dropdown-item-selected">
Week 2</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 3">
<strong class="category-text">
Week 3</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 4">
<strong class="category-text">
Week 4</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 5">
<strong class="category-text">
Week 5</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 6">
<strong class="category-text">
Week 6</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 7">
<strong class="category-text">
Week 7</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 8">
<strong class="category-text">
Week 8</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 9">
<strong class="category-text">
Week 9</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 10">
<strong class="category-text">
Week 10</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 11">
<strong class="category-text">
Week 11</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 12">
<strong class="category-text">
Week 12</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 13">
<strong class="category-text">
Week 13</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 14">
<strong class="category-text">
Week 14</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Week 15">
<strong class="category-text">
Week 15</strong>
</div>
<div class="category cursor-pointer dropdown-item font-sf-ui-display-medium" data-value="Bowls">
<strong class="category-text">
Bowls</strong>
</div>
</div>
</div>
</div>
</bc-dropdown>

我有这样的代码,我需要在python中使用selenium来更改所选的下拉列表,但我无法使其工作。我已经尝试了很多事情,包括用以下内容更改所选属性:

dropdown = browser.find_element(By.TAG_NAME, "bc-dropdown")
browser.execute_script("arguments[0].setAttribute('selected',arguments[1])",dropdown, value)

我不知道该怎么做。问题是,如果我手动更改所选属性,页面的其余部分根本不会更改,而且由于它不是一个select元素,我无法使用selenium中已经内置的select功能。有人能帮我吗?

您可以点击该下拉列表(根据我从您的请求中了解到的年份(,也可以点击数周的下拉列表——还可以拒绝cookie,以便能够点击这些下拉列表——使用:

try:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "onetrust-reject-all-handler"))).click()
print('rejected cookies')
except Exception as e:
print('no cookie button!')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'bc-dropdown[options="2021,2022"]'))).click()
print('clicked years dropdown')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div[class^="bc-dropdown bc-wc-select-container"]'))).click()
print('clicked the weekly dropdown')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div[class^="bc-week-dropdown-width dropdown-menu"]'))).find_element(By.CSS_SELECTOR, 'div[data-value="Week 13"]').click()
print('selected Week 13')

别忘了F.霍克在答复中提到的进口产品。Selenium文档可在https://www.selenium.dev/documentation/

另一个想法是:您所追求的实际数据可以以一种更健壮的方式获得,抓取GraphQL端点,使该页面水合。如果你善意地问F.霍克,他可能会告诉你这件事

最新更新